Двоичный код нужен для выражения числа последовательностью разрядов, каждый из которых может принимать только дв значения (0 или 1), то есть это позиционная система счисления с основанием 2. Нужна такая система из-за доступной реализации логических вентилей на уровне железа (электроники).
Наличие напряжения выше определенного значения - логическая "1"
Наличие напряжения ниже определенного значения - логический "0"
Принцип построение основан на нахождение остатков от деления на основание системы, то есть на 2. Считается остаток, затем число приравнивается к целой части, полученной от деления на 2. И так далее, пока число не станет меньше основания. Остатки записываются, начиная с конечного. Пример:
Перевоем 123(10) в 2-ую систему последовательным делением на 2.
123/2 = 61, остаток: 1
61/2 = 30, остаток: 1
30/2 = 15, остаток: 0
15/2 = 7, остаток: 1
7/2 = 3, остаток: 1
3/2 = 1, остаток: 1
1/2 = 0, остаток: 1
123(10) = 1111011(2)
алгоритм программного получения:
function getBinFromDec(x : integer):String;
var tmpStr : String;
begin
tmpStr := '';
while(x > 0) do begin
tmpStr := intToStr(x mod 2) + tmpStr;
x := x div 2;
end;
result := tmpStr;
end;
Иногда двоичное число обозначают префиксом 0b ( пример 0b101 ). Особенно при выводе во многих IDE(средах разработки).
Обычно «есть сигнал» обозначают единицей, а «нет сигнала» – нулём: отсюда и выражение, что «компьютер говорит на языке нулей и единиц».
Но в компьютере числа представляются не так просто, как в решении задач по дискретной математике и информатике.
Прямой, обратный и дополнительный коды двоичного числа — способы представления двоичных чисел с фиксированной запятой в компьютерной (микроконтроллерной) арифметике, предназначенные для записи отрицательных и неотрицательных чисел. К примеру, десятичное число 100 в двоичном виде будет равно 1100100, или в восьмибитном представлении 0110 0100. А как представить отрицательное десятичное число в двоичном виде и произвести с ним арифметические операции? Для этого и предназначены разные способы представления чисел в двоичном коде. Сразу отмечу, что положительные числа в двоичном коде вне зависимости от способа представления (прямой, обратный или дополнительный коды) имеют одинаковый вид.
Прямой код — способ представления двоичных чисел с фиксированной запятой. Главным образом используется для записи неотрицательных чисел.
Прямой код используется в двух вариантах.
В первом (основной) — для записи только неотрицательных чисел:
В этом варианте (для восьмибитного двоичного числа) мы можем записать максимальное число 255 (всего чисел 256 — от 0 до 255)
Второй вариант — для записи как положительных, так и отрицательных чисел.
В этом случае старший бит (в нашем случае — восьмой) объявляется знаковым разрядом (знаковым битом).
При этом, если:
— знаковый разряд равен 0, то число положительное
— знаковый разряд равен 1, то число отрицательное
В этом случае диапазон десятичных чисел, которые можно записать в прямом коде составляет от — 127 до +127.
Использование прямого кода для представления отрицательных чисел является неэффективным — очень сложно реализовать арифметические операции и, кроме того, в прямом коде два представления нуля — положительный ноль и отрицательный ноль (чего не бывает).
Обратный код — метод вычислительной математики, позволяющий вычесть одно число из другого, используя только операцию сложения.
Обратный двоичный код положительного числа состоит из одноразрядного кода знака (битового знака) — двоичной цифры 0, за которым следует значение числа.
Обратный двоичный код отрицательного числа состоит из одноразрядного кода знака (битового знака) — двоичной цифры 1, за которым следует инвертированное значение положительного числа.
Для неотрицательных чисел обратный код двоичного числа имеет тот же вид, что и запись неотрицательного числа в прямом коде.
Для отрицательных чисел обратный код получается из неотрицательного числа в прямом коде, путем инвертирования всех битов (1 меняем на 0, а 0 меняем на 1).
Для преобразования отрицательного числа записанное в обратном коде в положительное достаточного его проинвертировать.
При 8-битном двоичном числе — знаковый бит (как и в прямом коде) старший (8-й).
Дополнительный код — наиболее распространенный способ представления отрицательных чисел. Он позволяет заменить операцию вычитания на операцию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел. В дополнительном коде (как и в прямом и обратном) старший разряд отводится для представления знака числа (знаковый бит).
Дополнительный код отрицательного числа можно получить двумя способами
1-й способ:
— инвертируем значение отрицательного числа, записанного в прямом коде (знаковый бит не трогаем)
— к полученной инверсии прибавляем 1
Пример:
Дано десятичное число -10
Переводим в прямой код:
10 = 0000 1010 —-> -10 = 1000 1010
Инвертируем значение (получаем обратный код):
1000 1010 —-> 1111 0101
К полученной инверсии прибавляем 1:
1111 0101 + 1 = 1111 0110 — десятичное число -10 в дополнительном коде
2-й способ:
Вычитание числа из нуля
Дано десятичное число 10, необходимо получить отрицательное число (-10) в дополнительном двоичном коде
Переводим 10 в двоичное число:
10 = 0000 1010
Вычитаем из нуля:
0 — 0000 1010 = 1111 0110 — десятичное число -10 в дополнительном коде