Системы счисления и преобразование данных
В соответствии с тем, что двоичный код имеет позиционную структуру, т. е. старший разряд левее младшего, то можно закодировать:
· двумя битами - 4 значения: 00, 01, 10, 11 или (22);
· тремя – 8 значений: 000, 001, 010, 011, 100, 101, 110, 111 или (23);
· четырьмя – 16 значений или 24;
· пятью – 32 значения или 25;
· восемью – 256 значений или (28) и т. п.
Таким образом, общая формула записи двоичного числа: N=2m, где m – число разрядов.
Восьмиразрядное двоичное число (28) называют байтом (1 byte = 8 bit).
Биты в байте нумеруются с конца цифровой последовательности: от 0-го до 7-го.
Минимальная комбинация в одном байте – восемь нулей:
000000002=0*27+0*26+0*25+0*24+0*23+0*22+0*21+0*20 =010
Максимальная – восемь единиц, что соответствует числу 255 в десятичной системе:
111111112=1*27+1*26+1*25+1*24+1*23+1*22+1*21+1*20=128+64+32+16+8+4+2+1=25510
(Подстрочным индексом обозначается основание системы счисления).
Обратное преобразование десятичного кода в двоичный осуществляется делениемдесятичного числа на основание системы счисления (в данном случае - число 2) до тех пор, пока частное не будет равно единице. Совокупность остатков от деления, записанная слева направо, образует двоичный аналог десятичного числа.
Пример: 13 : 2 = 6 + 1
6 : 2 = 3 + 0
3 : 2 = 1 + 1
1 : 2 =0+ 1
В итоге: 1310 = 11012 =23+1*22+0*21+1*20 =1310
Кроме двоичного кода, в информатике используется восьмеричный код и широко применяется шестнадцатеричный код, обозначаемый буквой h (hexadecimal). Этим кодом записывается четырехразрядное двоичное число.
Разряд (24) шестнадцатеричного кода соответствует 16 различным значениям бинарного кода.
Значения от 0 до 9 разряда числа записываются цифрами десятичного кода:
0000 – 0; 0001 – 1; 0010 – 2; 0011 – 3; … 1000 – 8; 1001 – 9;
а остальные значения разряда (в десятичной системе – это уже следующий разряд) записываются первыми буквами латинского алфавита:
1010 – А(10); 1011 – B(11); 1100 – C(12);
1101 – D(13); 1110 – E(14); 1111 – F(15).
Преобразование из шестнадцатеричной системы в десятичную осуществляется просто, например:
A3h = 1010 00112 = 10*161 + 3*160 =16310
Проверка: 1*27+1*25+1*21+1*20 = 128 + 32 + 2 + 1 = 160 + 3 = 16310
Другой пример:FAh = 1111 10102 = 15*161+10*160 = 25010
Проверка:27+26+25+24+23+21 = 128+64+32+16+8+2 = 25010
Преобразование из десятичной в шестнадцатеричную осуществляется (аналогично двоичной) делениемна основание системы счисления (16) и с записью остатка слева направо:
250 : 16 = 15 +10 (младший разряд - 160 * А);
15 : 16 = 0 +15 (старший разряд - 161 * F).
Итог: FAh = 15*161+10*160=25010
Делением на основание системы счисления можно преобразовывать числа из десятичной системы в систему счисления с любым основанием.
Для перевода правильной десятичной дроби в другую систему счисления её нужно последовательно умножать на основание заданной системы счисления. В каждом шаге умножения участвуют только дробные части. Процесс умножения продолжается до получения требуемого числа знаков (если точный перевод не возможен) или произведения, дробная часть которого равна нулю. Целые числа произведения, начиная с первого, являются значениями разрядов правильной дроби в заданной системе. (При округлении величина погрешности равна половине веса цифры основания заданной системы счисления).
Пример перевода правильной дроби 0,655110 в двоичную систему:
0,6551*2 = 1,3102 1
0,3102*2 = 0,6204 0
0,6204*2 = 1,2408 1
0,2408*2 = 0,4816 0
В результате: 0,665110 = 0,10108
Пример перевода правильной дроби 0,6551 в шестнадцатеричную систему:
0,6551*16 = 10,4816 A
0,4816*16 = 7,7056 7
0,7056*16 = 11,2896 B
0,2896*16 = 4,6336 4
В результате: 0,655110 = 0,A7B4h
Для представления отрицательных целых чисел в компьютерах используется дополнительный код, который позволяет заменить операцию вычитаниянаоперацию сложения и сделать операции сложения и вычитания одинаковыми для знаковых и беззнаковых чисел, что упрощает архитектуру ЭВМ.
Дополнительный код отрицательного двоичного числа можно получить инвертированием модуля двоичного числа и прибавлением единицы к младшему значащему разряду инверсии (обратного кода).
При записи числа в дополнительном коде старший разряд является знаковым.
Таким образом, преобразование числа из прямого кода в дополнительный осуществляется по следующему алгоритму:
- если число, записанное в прямом коде, положительное, то к нему дописывается старший (знаковый) разряд, равный "0", и на этом преобразование заканчивается;
- если число, записанное в прямом коде, отрицательное, то все разряды числа инвертируются, а к результату прибавляется "1". К получившемуся числу дописывается старший (знаковый) разряд, равный "1".
Пример. Преобразуем отрицательное число −5, записанное в прямом коде, в дополнительный. Прямой код числа −5, взятого по модулю:
Инвертируем все разряды числа, получая таким образом обратный код:
Добавим к результату единицу:
Допишем слева знаковый единичный разряд:
Для обратного преобразования числа 1011, представленного в дополнительном коде, используется тот же алгоритм, а именно:
инвертируем все разряды числа, получая, таким образом, обратный код:
добавляем к результату единицу, опускаем "0" в старшем разряде и получаем прямой код числа -5:
Проверка: сложение прямого кода числа с дополнительным кодом даёт нуль с единицей в старшем разряде, который не учитывается.
0101 + 1011 = 10000 (старший разряд отбрасывается).
Таблица представления прямого и дополнительного кодов:
Десятичное представление | Код двоичного представления (1 байт) | |
прямой | дополнительный | |
-0 | -------- | |
-1 | ||
-2 | ||
-3 | ||
-4 | ||
-5 | ||
-6 | ||
-7 | ||
-8 | ||
-9 | ||
-10 | ||
-11 | ||
-127 | ||
-128 | -------- |