Независимо от системы счисления, число всегда может рассматриваться в качество полинома «по B», где B — основание. Более того, основание определяет общее количество цифр, используемых для написания чисел.
Следовательно abcd с основанием B может быть интерпретировано следующим образом:
abcd = d * B0 + c * B1 + b * B2 + a * B3
Значение цифр a, b, c и d находится между 0 и B-1.
Система | Используемые цифры | Основание | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Двоичная | 0 | 1 | 2 | ||||||||||||||
Восьмеричная | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||||||||
Десятичная | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||||||
Шестнадцатеричная | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 16 |
Десятичное значение цифр | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
В шестнадцатеричной системе не хватает 6 символов, необходимых для представления чисел со значением от 10 до 15, поэтому используются буквы от A до F.
Примечание:
Во всех системах последовательные степени основания записываются следующим образом: 1, 10, 100, 1000, 10000, …
Преобразование из любой системы в десятичную. Преобразуемое число первоначально переводиться в полином:
100112 | = 1*20 | + 1*21 | + 0*22 | + 0*23 | + 1*24 |
= 1 | + 2 | + 0 | + 0 | + 16 | |
= 1910 | |||||
1AF16 | = F*160 | +F*161 | +F*162 | ||
= F | +A*16 | +256 | |||
= 43110 |
Преобразование из десятичной в другую систему. Пусть B является основанием, к которому должно быть приведено число N1, записанное в десятичном виде.
Преобразование осуществляется следующим образом:
Пример 1: записать 19 в двоичном виде:
R1 | = 19 MOD 2 = 1 |
N2 | = 19\2 = 9 |
R2 | = 9 MOD 2 = 1 |
N3 | = 9\2 = 4 |
R3 | = 4 MOD 2 = 0 |
N4 | = 4\2 = 2 |
R4 | = 2 MOD 2 = 0 |
N5 | = 2\2 = 1 |
R5 | = 1 MOD 2 = 1 |
N6 | = 1\2 = 0 |
1910 | = 100112 |
Пример 2: записать 234 в шестнадцатеричном виде:
R1 | = 234 MOD 16 = 10 → A |
N2 | = 234\16 = 14 |
R2 | = 14 MOD 16 = 14 → E |
N3 | = 14\16 = 0 |
23410 | = EA16 |
Преобразование «двоичная/шестнадцатеричная»
Преобразование между любыми двумя системами может осуществляться через посредство десятичной. Сначала преобразование идёт в соответствии с п.1, а затем — п.2. Преобразование между двоичной и шестнадцатеричной системами может осуществляться быстрее:
Пример 1: записать 1000111112 в шестнадцатеричном виде
Двоичное число делиться на группы из 4 цифр каждая, начиная справа. Затем отдельные группы прямо преобразуются в шестнадцатеричные цифры.
1 | 0001 | 1111 |
1 | 1 | F |
1000111112 = 11F16 |
Пример 2: записать 11F16 в двоичном виде
Каждая шестнадцатеричная цифра переводиться в двоичную с добавлением необходимых нулей для получения групп из 4 двоичных цифр.
1 | 1 | F |
0001 | 0001 | 1111 |
11F16 = 000100011111 = 1000111112 |
Итак, все числа должны быть записаны в электронной памяти компьютера в двоичном виде. Однако, существуют различия между «математическим» двоичным представлением, которое только что было объяснено, и компьютерным:
Элемент, способный представлять 0 и 1 называется битом.
Компьютерная память распределена на группы по восемь битов, называемые байтами. Компьютер может обратиться к содержимому любого байта в памяти по определённому «адресу».
Из практических соображений целое число храниться в двух байтах, что даёт 65536 различных конфигураций:
00000000 00000000 = 0 00000000 00000001 = 1 00000000 00000010 = 2 00000000 00000011 = 3 ───────────────────────── 11111111 11111111 = 65536
На первый взгляд кажется, что два байта позволяют представить целые числа от 0 до 65536. Но на компьютере первый бит зарезервирован для знака числа: если первый бит — 0, число положительное; если же оно отрицательное, то первый бит — 1.
Следующие конфигурации битов представляют положительные числа:
00000000 00000000 = 0 00000000 00000001 = 1 ───────────────────────── 01111111 11111111 = 32767
Кажется вполне естественным, что для образования отрицательных чисел в памяти компьютера достаточно заменить первый бит вышеуказанных конфигураций на 1 (обратите внимание, что в этом случае будут два представления нуля). Однако реально всё осуществляется несколько сложнее. Компьютер работает с представлением целого числа следующим образом:
Пример 1: представление -1
00000000 00000001 = + 1 11111111 11111110 все биты инвертированы 11111111 11111111 к младшему биту добавлена 1 (переноса нет)
В памяти компьютера -1 имеет то же двоичное представление, что и 65536 в математике. Поэтому -1 считается двоичным представлением 65536.
Пример 2: представление -32767
01111111 11111111 = 32767 10000000 00000000 инвертированные биты 10000000 00000001 добавлена 1
Таким образом, в двух байтах возможно представление следующих чисел:
00000000 00000000 = 0 00000000 00000001 = 1 ────────────────────────── 01111111 11111111 = 32767 11111111 11111111 = -1 11111111 11111110 = -2 ────────────────────────── 10000000 00000001 = -32767 10000000 00000000 = -32768
Итак, мы получили представление чисел от -32768 до +32767, т.е. всего 65535 различных значений.
Зачем нужно такое сложное представление?
На практике такое представление чисел с использованием дополнительного кода предоставляет два преимущества:
Для вычитания используется схема получения дополнительного кода и схема сложения.
Пример 1: как компьютер получает результат операции 256 - 8
256 = 00000001 00000000 8 = 00000000 00001000
Двоичный дополнительный код этой конфигурации:
-8 = 11111111 11111000
Компьютер получает сумму:
00000001 00000000 + 11111111 11111000 ───────────────────────── 00000000 11111000 = 248
Пример 2: вычисление 8 - 256
8 = 00000000 00001000 256 = 00000001 00000000 -256 = 11111111 00000000 00000000 00001000 + 11111111 00000000 ───────────────────────── 11111111 00001000
Для получения значения этого отрицательного числа вычисляется его дополнительный код, который равен
00000000 11111000 = 248
В результате вычитания действительно получается -248.