C#.net из двоичной в десятиричную...
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
привет... есть ли в си шарпе готовые класы для перевода из двоичной в десятиричную систему счисления...???
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
привет... есть ли в си шарпе готовые класы для перевода из двоичной в десятиричную систему счисления...???
rassamaha, Спасибо.
Перечитай вику, там все правильно написано.
Если без лишних букв, то переводится в ДК на примере числа (-11)
двоичный код +11 инверсия +1-11 —> 0000 1011 —> 1111 0100 —> 1111 0101
Или словесное описание алгоритма:
1. записать прямой код модуля числа;При таких описаниях, вообще не вижу помех выйти за пределы и (-128)
2. инвертировать его (заменить единицы нулями, нули — единицами);3. прибавить к инверсному коду единицу.
10010111 (151) + 01101010 (типа −150) = 100000001 — получили 9 бит, а есть всего 8, откинем старший разряд, получим, 151−150=1.
там вроде все нормально расписано.
Пример. Преобразуем отрицательное число −5, записанное в прямом коде, в дополнительный.
Прямой код числа −5, взятого по модулю:
101
Инвертируем все разряды числа, получая таким образом обратный код:
1010
Добавим к результату 1 и допишем знаковый единичный разряд
1011
Для обратного преобразования используется тот же алгоритм. А именно:
1011
Инвертируем все разряды числа, получая таким образом обратный код:
0100
Добавим к результату 1 и проверим, сложив с дополнительным кодом
0101 + 1011 = 10000, пятый разряд выбрасывается.
офтоп: ох и напрягали нас в универе по этому поводу, строили сумматоры, вычитатели, регистры и прочую дребедень) сейчас понимаю, что это дало нам: лучшее понимание, что происходит за кулисами железа.
мне интересно и о отрицательном ноле, только я вот с ДК еще не до конца разобрался:
Дополнительный код.Для отрицательного числа дополнительный код образуется путем получения обратного кода и добавлением к младшему разряду единицы.
смотрим как получить обратный код:
со знаковыми разрядами — это прямой код, в прямом коде для записи числа 7 бит — (128) не влазит.: (Для отрицательного числа все цифры числа заменяются на противоположные (1 на 0, 0 на 1), а в знаковый разряд заносится единица.
rassamaha, можете расписать сам алгоритм, как Вы переводите в ДК?
Есть еще понятие отрицательный ноль в архитетуре компьютеро, но наверно тебе это не интересно:)
я слышал о прямом, обратном и дополнительном коде.
Прямой код.
Прямой код числа в двоичной системе счисления совпадает по изoбражению с записью самoгo числа в двоичной системе счисления. Значение знакoвого разряда для положительных чисел равно 0, для отрицательных чисел — (1). Знаковым разрядом обычно является крайний разряд в разрядной сетке.
Пример:Если для записи кода выделен один байт, то для числа (+1) прямой код 0×000 0001, для числа (-1) прямой код 1×000 0001.
это вырезка из документации, исходя из нее крайний бит СТРОГО предназначен для записи знака числа, а 7 бит СТРОГО предназначены для записи самого числа, значит, получается, что мы должны впихнуть (128) в 7 бит, но как? в 7 бит — максимум лезет 127, то естьle мы можем работать с диапазоном от (-127) до (127)
блин... где ты был раньше... я уже свой метод написал по переводу...:)
Могу еще рассказать как сумматор работает — 133 серии:)
З.Ы. Все гениальное просто =)
а как (-128) влазит не пойму: (
есть, работают в обе стороны, примерно так
//Convert to binary from integer
int useBase = 2;
long data = 768;
//returns in base 2
string strBinary = Convert.ToString(data, useBase);
//Convert to integer from binary
int integer = Convert.ToInt32("1011", useBase);
возьмите такой вариант.
using System;
namespace ConsoleApplication1
{
class Program
{
static string DecToBase(int num_value, int base_value)
{
var max_bit = 32;
var dec_base = 10;
var hexchars = new[] { ’A’, ’B’, ’C’, ’D’, ’E’, ’F’ };
var result = string.Empty;
var result_array = new int[32];
for (/* nothing */; num_value > 0; num_value /= base_value)
{
int i = num_value % base_value;
result_array[—max_bit] = i;
}
for (int i = 0; i < result_array.Length; i++)
{
if (result_array[i] >= dec_base)
{
result += hexchars[(int)result_array[i] % dec_base].ToString();
}
else
{
result += result_array[i].ToString();
}
}
result = result.TrimStart(new char[] {’0′});
return result;
}
static void Main(string[] args)
{
int i = 256;
Console.WriteLine("{0} in binary is {1}", i, DecToBase(i, 2));
Console.ReadLine();
}
}
}
15 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів