Россия |
Двоичные числа и двоичная арифметика
Принцип представления чисел в позиционных системах счисления
Позиционной называется система счисления, в которой вес разряда числа определяется его позицией в записи числа [1].
Вспомним нашу привычную десятичную систему счисления, в которой мы с детства производим все расчеты. Уже в начальной школе мы привыкли к терминам "единицы", "десятки", "сотни", "тысячи", "десятые", "сотые", "тысячные" и не задумываемся над тем, что они означают вес разряда, выраженный в виде числа, равного , где
- целое число. Например, число 125, 46 можно представить в виде суммы:
![125,46 = 1\cdot 10^{2 }+ 2\cdot 10^{1} + 5\cdot 10^{0} + 4\cdot 10^{-1} + 6 \cdot 10 ^{-2}.](/sites/default/files/tex_cache/f8f60061e98a9f1eaf378ec0d7303577.png)
сотни десятки единицы десятые доли сотые доли
Аналогично любое число в десятичной системе счисления можно представить в виде подобной суммы:
![]() |
( 11.1) |
где - количество знаков в целой части числа,
- количество знаков в дробной части числа,
- вес
-го разряда,
- весовой коэффициент для
-го разряда числа.
Количество возможных вариантов значения коэффициента
в десятичной системе счисления равно
, поскольку для записи чисел в ней используются десять знаков - арабские цифры "0", "1", "2", "3", "4", "5", "6", "7", "8" и "9". Число
является основанием системы счисления. Исторически сложилось, что десятичная система получила наибольшее распространение, хотя по этому принципу можно сделать аналогичную запись в любой другой системе счисления c любым другим основанием. В табл. 11.1 прослежива
ется аналогия между позиционными системами счисления.
Основание системы счисления - это число, равное количеству знаков, которые используются в этой системе для записи чисел.
Для числа в системе счисления с основанием выражение (11.1) преобразуется к виду:
![]() |
( 11.2) |
Название системы счисления | Основание системы счисления | Знаки, использующиеся для записи чисел |
---|---|---|
Двоичная | 2 | 0, 1 |
Троичная | 3 | 0, 1, 2 |
Четверичная | 4 | 0, 1, 2, 3 |
… | … | … |
Восьмеричная | 8 | 0, 1, 2, 3, 4, 5, 6, 7 |
… | … | … |
Десятичная | 10 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 |
… | … | … |
Шестнадцатеричная | 16 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F |
… | … | … |
С началом развития цифровой вычислительной техники большой интерес стала вызывать двоичная система, поскольку вычислительная машина любого поколения и любой степени сложности - это совокупность логических схем. Работа элементов этих схем основана на ключевом режиме работы транзистора, в котором он может быть только в двух состояниях, принимаемых за логический 0 и логическую 1.
Запись двоичного числа, как будет показано ниже, как правило, довольно длинна и громоздка, поэтому для более короткой записи двоичных чисел применяются восьмеричные и шестнадцатеричные числа. Выбор именно этих систем обусловлен тем, что их основания равны целой степени числа 2. Основание восьмеричной системы , а основание шеснадцатиричной системы - это
. Для записи шестнадцатеричных чисел арабских цифр не хватает, поэтому используются первые шесть заглавных букв латинского алфавита.
Итак, далее мы подробно рассмотрим именно эти позиционные системы - двоичную, восьмеричную, шестнадцатеричную и их связь с привычной нам десятичной системой счисления.
Приведем примеры записи чисел в указанных системах и найдем их десятичные эквиваленты по формуле (11.2).
Для двоичного числа:
![10111,01_{2 }= 1 \cdot 2^{4} + 0\cdot 2^{3} + 1\cdot 2^{2} +1\cdot 2^{1} + 1\cdot 2^{0} + 0\cdot 2^{-1 }+1\cdot 2^{-2} = 16 + 4 + 2 + 1 + \cfrac{1}{4} = 23,25.](/sites/default/files/tex_cache/ddf5c3e79800cc427d660936c558b8ff.png)
Здесь и далее будем придерживаться следующего правила: числа в двоичной, восьмеричной и шестнадцатеричной системах записываются с указанием основания, десятичные - без этой записи.
Для восьмеричного числа:
![302, 02_{8} = 3 8^{2} + 0 8^{1} + 2 8^{0} + 0 8^{-1} + 2 8^{-2} = 3 \cdot 64 + 2 \cdot 1 + 2 \cdot \cfrac{1}{64} \approx 194,03.](/sites/default/files/tex_cache/cfe924b789137773e04e19b68af5ef0a.png)
Для шестнадцатеричного числа:
![1Е, 03_{16 }= 1 16^{1} + 14 16^{0} + 0 16^{-1} + 3 16^{-2} = 16 + 14 + 3 \cdot \cfrac{1}{16^2} \approx 30, 01.](/sites/default/files/tex_cache/283e997878fb0b8bd47b482522ef0912.png)
Округление относится к дробной части числа, целая часть переводится точно. Особенностью перевода из шестнадцатеричного кода в десятичный код является то, что в качестве коэффициента используется десятичный эквивалент шестнадцатеричного знака в соответствии с таблицей 11.2. Для нашего примера вместо знака "
" в расчетную формулу (11.2) подставляется десятичное число
.
Из рассмотренных примеров видно, что общая формула (11.2) может использоваться для перевода числа из системы счисления с любым основанием в десятичную.
Перевод чисел из одной системы счисления в другую
Перевод из десятичной системы в любую другую. Перевод целых чисел
Целое десятичное число нужно поделить на основание новой системы счисления. Остаток от этого деления является самым младшим разрядом в новой записи числа. Результат деления вновь делится на основание. Остаток от этого деления будет следующим разрядом в новой записи числа, результат деления вновь делится на основание и т.д. до тех пор, пока в результате деления получится число, меньшее по величине, чем основание новой системы. Остаток этого последнего деления будет предпоследним разрядом в новой записи числа, а результат этого последнего деления - самым старшим разрядом в новой записи числа.
Проверка перевода осуществляется по формуле (11.2), так, как это показано ниже на примерах.
Пример. Перевести десятичное число 125 в двоичную, восьмеричную и шестнадцатеричную системы счисления. Проверить результаты по формуле (П11.2).
Проверка:
-
в двоичном коде:
;
-
в восьмеричном коде
;
-
в шестнадцатеричном коде -
.
В рассмотренном примере при переводе вместо коэффициента используется его десятичный эквивалент
в соответствии с таблицей 11.2.
Перевод из двоичной системы в шестнадцатеричную (восьмеричную)
Как уже было сказано выше, шестнадцатеричный и восьмеричный коды используются для более компактной и удобной записи двоичных чисел. Так, программирование в машинных кодах осуществляется в большинстве случаев в шестнадцатеричном коде. Правила перевода для шестнадцатеричной и восьмеричной системы структурно одинаковы, отличия для восьмеричной системы отображаются в скобках.
Двоичная запись числа делится на группы по четыре ( три ) двоичных знака влево и вправо от запятой, отделяющей целые и дробные части Неполные крайние группы (если они есть) дополняются нулями до четырех ( трех ) знаков. Каждая группа заменяется одним шестнадцатеричным ( восьмеричным ) знаком в соответствии с кодом группы (табл. 11.2).
Двоичная группа | Шестнадцатеричный знак | Десятичный эквивалент | Двоичная группа | Восьмеричный знак |
---|---|---|---|---|
0000 | 0 | 0 | 000 | 0 |
0001 | 1 | 1 | 001 | 1 |
0010 | 2 | 2 | 010 | 2 |
0011 | 3 | 3 | 011 | 3 |
0100 | 4 | 4 | 100 | 4 |
0101 | 5 | 5 | 101 | 5 |
0110 | 6 | 6 | 110 | 6 |
0111 | 7 | 7 | 111 | 7 |
1000 | 8 | 8 | ||
1001 | 9 | 9 | ||
1010 | A | 10 | ||
1011 | B | 11 | ||
1100 | C | 12 | ||
1101 | D | 13 | ||
1110 | E | 14 | ||
1111 | F | 15 |
Примеры:
- перевод в шестнадцатеричную систему:
- перевод в восьмеричную систему:
Перевод из шестнадцатеричной (восьмеричной) системы в двоичную
Обычно программы в машинных кодах записаны в шестнадцатеричной системе счисления, реже - в восьмеричной. При необходимости отдельные числа такой программы записываются в двоичном коде, например, при рассмотрении форматов регистров, кодов операции команд и т.п. В этом случае нужен обратный перевод из шестнадцатеричной (восьмеричной) системы счисления в двоичную по следующему правилу.
Каждая цифра (без всяких сокращений!) шестнадцатеричного ( восьмеричного ) числа заменяется одной двоичной группой из четырех ( трех ) двоичных знаков (табл. 11.2).
Примеры:
- для шестнадцатеричного числа:
;
- для восьмеричного числа:
.
Как показано в примерах, крайние нули слева и справа при желании можно не писать, но такое сокращение делается уже после перевода в двоичную систему.