Главная arrow Двоичный код arrow Шестнадцатеричные числа
Как начинался компьютер
Компьютерная революция
Двоичный код
Разработки военных лет
Интегральные микросхемы
Микрокомпьютер
Персоны
Сеть
Язык компьютера
Развитие ПО
Гибкие системы
Средства разработки
Информатика
Вычислительная наука
Операционные системы
Искусственный интеллект
Предыстория
Поиск
Знания и рассуждения
Логика
Робототехника
 

 
Шестнадцатеричные числа Печать
С основами арифметики знакомишься так рано, что даже трудно вообразить свою жизнь без этих знаний. Взглянув на число 145, любой без малейших колебаний скажет, что это "сто сорок пять".
 
Понимание двоичных и шестнадцатеричных чисел потребует по-новому взглянугь на число 145 и увидеть в нем не число, а некоторый код для его выражения.

Начнем с малого. Рассмотрим взаимосвязь между числом три и символом ''3". Символ числа (цифра) 3 - это некая "закорючка" на листе бумаги, а само число три - это уже абстрактная концепция. Для представления определенного числа используется определенная цифра.

Отличие между концепцией и символом становится яснее, если осознать, что для представления одного и того же понятия могут использоваться совершенно разные символы: три, 3, | | |, 111 или ***.

В десятичной системе счисления для представления чисел используются цифры 0, 1, 2, 3,4, 5, 6, 7, 8 и 9. А как же представить число десять?

Предположим, необходимо разработать систему счисления. Для представления числа десять можно было бы использовать символ А (символьная система, как у древних славян) или "сороконожку" 1111111111 (которую рисуют на стене в местах не столь отдаленных). Римляне использовали пятеричный символ X. В арабской системе счисления (которой пользуются большинство людей) основную роль для представления значения имеет позиция цифры в числе. Первый (младший) разряд используется для единиц, следуюший (слева) - для десятков и т.д. Таким образом, число пятнадцать имеет вид 15 (один, пять), Т.е. один десяток и пять единиц.
 
Итак, вырисовываются некоторые правила, позволяющие сделать ряд обобщений.
  1. Счисление на основании 10 использует цифры от 0 до 9.
  2. Разряд представляет собой степень числа 10: единицы (1), десятки (10), сотни (100) и т.д.
  3. Поскольку третья позиция в числе представляет сотни, самым большим двухразрядным числом может быть 99. В общем случае, используя n разрядов, можно представить числа от 0 до 10n-1. Следовательно, с помощью трех разрядов можно представить числа от 0 до 103-1, или 0-999.
 
Другие системы счисления
 
Отнюдь не случайно люди используют основание 10, ведь пальцев на руках именно 10. Как ни странно, у римлян по той же причине основанием было 5. Либо на другой руке начинался следующий разряд, либо вторую руку использовали для подсчетов на первой. Но можно представить систему счисления и с другим основанием. Применяя правила, сформулированные для основания 10, можно описать представление чисел в системе счисления с основанием 8.
  1. Счисление на основании 8 использует цифры от 0 до 7.
  2. Разряд представляет собой степень числа 8: 1, 8, 64 и т.д.
  3. Общий случай представления для n разрядов - от 0 до 8n-1.
Чтобы различать числа, написанные с использованием разных оснований, основание записывают рядом с числом в виде нижнего индекса. Значит, число пятнадцать с основанием 10 можно записать как 1510 и читать как "один, пять с основанием десять".
 
Таким образом, для представления числа 1510 с основанием 8 следует записать 178. Это читается как "один, семь с основанием восемь". Обратите внимание, что это число также можно прочитать как "пятнадцать", поскольку именно оно и имеется в виду, просто использовано другое обозначение.
 
Откуда взялось число 17? Цифра 1 означает одну восьмерку, а цифра 7 означает семь единиц. Одна восьмерка плюс семь единиц равно пятнадцати. Рассмотрим пятнадцать звездочек:
********** *****
Возникает вполне естественное желание создать две группы: одна будет содержать десять звездочек, а другая - пять. В десятичной системе эта "композиция" представляется числом 15 (один десяток и пять единиц). Но те же звездочки можно сгруппировать и по-другому:
******** *******
То есть снова получатся две группы: с восемью и семью звездочками. Такое распределение звездочек может служить иллюстрацией представления числа 178 с основанием восемь (одна восьмерка и семь единиц).
 
 
Еще об основаниях
 
Число пятнадцать с основанием десять представляется как 15, с основанием девять - как 169, с основанием восемь - как 178, а с основанием семь - как 217. В системе счисления с основанием семь нет цифры 8, поэтому для представления числа пятнадцать нужно использовать две семерки и одну единицу.
 
Как же прийти к какому-нибудь общему принципу? Чтобы преобразовать десятичное число в число с основанием семь, вспомните о значении разрядов. В семеричной системе счисления переход к следующему разряду будет про исходить на значениях, соответствующих десятичным числам: единица, семь, сорок девять, триста сорок три и т.д. Откуда взялись эти числа? Так ведь это же степени числа семь: 70, 71, 72, 73 и т.д.
 
Напомним, что число в нулевой степени (например, 70) равно единице, число в первой степени (например, 71) равно самому себе, число во второй степени - это число, умноженное само на себя (72 = 7*7 = 49), (73 = 7*7*7 = 343), а число в степени n - это число, умноженное само на себя n раз.
Построим таблицу.
 
Разряд
4
3
2
1
Степень
73
72 71
70
Значение
343
497
1
 
В первой строке представлен разряд числа. Во второй - степень числа 7, а в третьей - десятичное представление соответствующего разряда числа 7.
 
Чтобы представить десятичное число в системе счисления с основанием семь, необходима следующая процедура. Проанализируйте число и определите его старший разряд. Возьмем, например, число 200. Как известно, значение четвертого разряда равно 343, поэтому о нем можно не волноваться, этот разряд будет пуст.
 
Теперь выясним, сколько значений следующего разряда (49) содержит число. Разделим 200 на 49, в результате получится 4, это число и поместим в столбец третьего разряда, а остаток 4 исследуем дальше. Поскольку значение следующего разряда (7) в числе 4 не помещается, его значением также будет нуль. Не трудно догадаться, что в остатке 4 содержатся четыре единицы, поэтому и ставим цифру 4 в первый разряд. В итоге получаем число 4047.
 
Разряд4
3
2
1
Степень
73
72
71
70
Значение
343
49
7
1
200 с основанием семь0
4
0
4
Десятичное значение
0
4*49=196
0
4*1=4
 
В этом примере число 4 в третьем разряде (столбце) представляет собой десятичное значение 196, а в первом столбце - значение 4. Таким образом, 196+4 = 200. Следовательно, 4047 = 20010.
 
Рассмотрим другой пример. Представим число 968 в системе счисления с основанием 6:
 
Разряд
5
43
21
Степень
646362
6160
Значение
1296
2163661
 
Удостоверьтесь, что правильно понимаете смысл значений столбцов. Помните, что 63 = 6*6*6 = 216.
Чтобы представить число 968 с основанием шесть, начинаем со столбца 5. Сколько раз 1296 помещается в 968? Ни разу, поэтому в столбец (разряд) 5 запишем 0. Разделим 968 на 216, получим 4 с остатком 104. В столбец 4 запишем 4. То есть столбец 4 представит число 4*216 (864).
 
Продолжим преобразование остатка (968 - 864 = 104). Разделим 104 на 36, получится 2 с остатком 32. В столбец 3 запишем 2. Разделим 32 на 6, получится 5 с остатком 2. В результате получим ответ - 42526.
 
Разряд
54321
Степень
64
63
62
61
60
Значение
129621636
6
1
968 с основанием шесть
0
4
2
5
2
Десятичное значение
04*216=8642*36=725*6=302*1=2
864+72+30+2 = 968
 
 
Двоичная система счисления
 
Минимальным допустимым основанием является два. Здесь существуют только две цифры: 0 и 1. Вот как выглядят разряды двоичного числа:
 
Разряд
8
7
6
5
4
3
2
1
Степень
27
26
25
24
23
22
21
20
Значение128
64
32
16
8
4
2
1
 
Для преобразования десятичного числа 88 в двоичное (с основанием два) выполним описанную выше процедуру. В числе 88 число 128 не укладывается ни разу, поэтому в восьмой разряд запишем 0.
 
В числе 88 число 64 укладывается только один раз, поэтому в седьмой разряд пишем единицу, а остаток равен 24.
В числе 24 число 32 не укладывается ни разу, поэтому в шестом разряде тоже будет 0.
В числе 24 число 16 укладывается один раз, поэтому пятой цифрой двоичного числа будет единица. Остаток при этом равен восьми. В остатке восемь число 8 (значение четвертого разряда) укладывается один раз, следовательно, в четвертой позиции ставим единицу. Новый остаток равен нулю, поэтому в оставшихся разрядах будут стоять нули.
 
Разряд
8
7
6
5
4
3
2
1
Степень
27
26
25
24
23
22
21
20
Значение
128
64
32
16
8
4
2
1
882
0
1
0
1
1
0
0
0
Десятичное значение
0
64
0
16
8
00
0
 
Проверим ответ, выполнив обратное преобразование:
 
1
x
64
=
64
0
x
32
=
0
1
x
16
=
16
1
x
8
=
8
0
x
4
=
0
0
x
2
=
0
0
x
1
=
0
-------------------------------
88
 
 
Почему именно основание два ?
 
Система счисления с основанием два более всего соответствует способу представления информации в компьютере. На самом деле компьютеры "понятия не имеют" ни о каких буквах, цифрах, командах или программах, поскольку представляют собой сложные электрические схемы, которые способны распознавать лишь напряжение и силу тока.
 
Для упрощения логики микросхем инженеры отказались от измерения силы тока (слабый, средний, большой и очень большой) и различают лишь два состояния (есть ток и нет тока). Собственно, в этом и состоит разница между аналоговой техникой и цифровой. Состояния "есть ток" и "нет тока" можно выразить и иначе, например: да или нет, ИСТИНА или ЛОЖЬ, true или false, 1 или 0. В соответствии с общепринятым соглашением единица равна true или истине, или "да", но это лишь соглашение; с таким же успехом она могла означать false или "нет".
 
Теперь несложно догадаться, в чем заключается неоспоримое преимущество двоичной системы счисления: с помощью единиц и нулей можно описать состояние отдельного элемента электрической схемы (есть ток или нет  тока). Ведь все элементы компьютера оперируют лишь двумя понятиями: есть или нет. Если есть - значит, единица,  если нет - значит, нуль.
 
 
Биты, байты и полубайты

Решив представлять данные последовательностями единиц и нулей, минимальную единицу информации, содержащую один двоичный разряд, назвали битом (bit, от binary digit - двоичная цифра). В связи с тем, что первые компьютеры были способны обрабатывать одновременно лишь по восемь битов, считалось вполне естественным писать код, используя восьмиразрядные двоичные числа, называемые байтами (byte). Половина байта (4 бита) называется полубайтом.
 
С помощью восьми двоичных разрядов можно представить до 256-ти различных значений. Почему? Рассмотрим разряды: если все восемь битов установлены (единица), значение составит 255 (128+64+32+ 16+8+4+2+ 1), если не установлен ни один бит (все они равны нулю), значение составит нуль. А в диапазоне от нуля до 255-ти как раз и содержатся 256 возможных вариантов.
 
 
Что такое килобайт ?
 
Оказалось, 210 (1 024) приблизительно равно 103 (1000). Это совпадение слишком заманчиво, чтобы не воспользоваться им. Поэтому в компьютерных кругах 210 байтов стали называть килобайтом (1 Кбайт), используя метрический префикс "кило", означающий тысячу.
 
Аналогично число 1024*1024 (1 048 576) достаточно близко к одному миллиону и называется мегабайтом (1 Мбайт), а 1 024 мегабайтов называются гигабайтом (1 Гбайт) ("гига" означает тысячу миллионов, или миллиард).
 
 
Двоичные числа
 
Компьютер использует наборы нулей и единиц для представления всего, с чем он работает. Машинные коды представляют собой пакеты нулей и единиц, понятных, центральному процессору и другим микросхемам. Отдельные наборы нулей и единиц можно перевести обратно в числа, понятные людям, но бьло бы ошибкой полагать, что это числа и что они на самом деле имеют такие значения.
 
Например, процессор Intel 8086 интерпретировал набор битов 10010101 как команду. Конечно, это число можно представить в десятичном виде (149), но для людей это не имеет никакого смысла.
 
Иногда числа представляют собой команды, иногда - значения, иногда - программный код. Одним из стандартизованных кодовых наборов является ASCII . В нем каждая буква или знак препинания имеет семиразрядное двоичное представление. Например, строчная буква "а" представлена двоичным числом 01100001. Хотя это значение можно преобразовать в десятичное число 97 (64 + 32 + 1), понимать его следует не как число, а как букву. Поэтому когда говорят, что буква "а" в стандарте ASCII представлена числом 97, на самом деле имеют в виду десятичное представление 97 двоичного числа 01100001, являющегося кодом буквы "а".
 
 
Шестнадцатеричная система счисления
 
Поскольку двоичные числа трудно читать, был найден более простой способ представления тех же значений. Перевод двоичного числа в десятичное достаточно труден, а в шестнадцатеричное - нет. Почему? Давайте рассмотрим сначала, что представляют собой шестнадцатеричные числа.
 
Для представления шестнадцатеричных чисел используются 16 символов: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E и F. Как видите, последние шесть - не цифры, а буквы. Буквы A-F были выбраны произвольно, просто потому что это первые буквы латинского алфавита. Разряды в шестнадцатеричном представлении имеют вид:
 
Разряд
43
2
1
Степень
163
162
161
160
Значение
4096
256
16
1
 
При переводе шестнадцатеричного числа в десятичное можно использовать описанную выше схему (вычислить сумму произведений цифр числа и значений соответствующих разрядов). Возьмем, например, число F8C:
 
F
x
256
=
15
x
256
=
3840
8
x
16
=
    128
C
x
1
=
12
x
1
=
12
--------------------------------------------------------
 3980
 
(Не забывайте, что F в шестнадцатеричном виде равно 1510 в десятичном.)
Преобразуя число FC в двоичное представление, сначала переведем его в десятичное, а затем уже в двоичное:
 
F
x
16
=
15
x
16
=
240
C
x
1
=
12
x
1
=
12
--------------------------------------------------------
252
 
Преобразование десятичного числа 25210 в двоичное представление:
 
Разряд
9
8
7
6
5
4
3
2
1
Степень
28
27
26
25
24
23
22
21
20
Значение
256
128
64
32
16
8
4
2
1
 
Разряд, соответствующий 256-ти, отсутствует.
 
1x
128
=
128
.
252-128
=
124
1
x
64
=
64
.
124-64
=
60
1
x
32
=
32
.
60-32
=
28
1
x
16
=16
.
28-16
=
12
1
x
8
=
8
.
12-8
=
4
1
x
4
=
4
.
4-4=
0
0
x
2
=
    0
0
x
1
=
    0
-------------------------------------------------------------
124+60+28+12+4 = 252
 
Таким образом, бьшо получено двоичное число 11111100.
 
Теперь, представив это число как два набора из четырех цифр (1111 1100), можно осуществить магическое превращение.
 
Правый набор представляет собой число 1100. В десятичном выражении это число 12, а в шестнадцатеричном - число C (1 *8 + 1 *4 + 0*2 + 0* 1).
 
Левый набор (1111) в десятичном выражении - число 15, а с основанием шестнадцать число F.
Итак, имеем:
 
1111
1100
F
C
 
Расположив два шестнадцатеричных числа рядом, получаем число FC, реальным значением которого будет 1111 1100. Этот быстрый метод преобразования всегда работает безотказно! Можно взять любое двоичное число любой длины, разбить его на группы по четыре разряда, перевести каждую группу в шестнадцатеричный вид, расположить эти цифры рядом - и получить шестнадцатеричное число. Вот другой пример:
 
1011
0001
1101
0111
 
Проверим сделанное предположение. Сначала преобразуем это число в десятичное. Рассчитаем значения разрядов, удваивая их значения. Самый младший разряд равен единице, следующий - двум, затем - четырем, восьми, шестнадцати и т.д.
 
Начнем со столбца самого младшего разряда, значением которого является десятичная единица. Запишем единицу, поскольку этот разряд содержит число 1. Цена следующего разряда слева - два. Здесь тоже находится единица, поэтому, умножив ее на 2 и прибавив предыдущий результат, получим общее количество 3.
 
Цена следующего разряда слева - четыре (она удваивается для каждого следуюшего разряда). Таким образом, получим 4+2+ 1 = 7.
 
Продолжим для всех остальных разрядов:
 
1
x
1
=
1
1
x
2
=
2
1
x
4
=
4
0
x
8
=
0
1
x
16
=
16
0
x
32
=
0
1
x
64
=
64
1
x
128
=
128
1
x
256
=
256
0
x
512
=
0
0
x
1024
=
0
0
x
2048
=
0
1
x
4096
=
4096
1
x
8192
=
8192
0
x
16384
=
0
1
x
32768
=
32768
----------------------------------
Всего:
45 527
 
Для преобразования этого числа в шестнадцатеричное необходима таблица значений шестнадцатеричных разрядов.
 
Разряд
5
4
32
1
Степень
164
163
162
161
160
Значение65536
4096
256
161
 
Исследуемое число меньше 65536-ти, поэтому начинать можно с четвертого столбца. Число 4096 (значение четвертого разряда) укладывается в числе 45 527 одиннадцать раз с остатком 471. В остатке 471 число 256 (значение третьего разряда) укладывается один раз с остатком 215. В остатке 215 число 16 (значение второго разряда) укладывается 13 раз с остатком 7. Таким образом, получаем шестнадцатеричное число B1D7.
 
Проверим это:
 
B(11)
x
4096
=
45056
1
x
256
=
256
D(13)
x
208
=
208
7
x
7
=
7
---------------------------------
Всего:45527
 
Для проверки ускоренного метода перевода возьмем двоичное число 1011000111010111, разделим его на группы по четыре знака: 1011 0001 1101 0111. Затем каждую из четырех групп преобразуем шестнадцатеричное число:
 
1011=
1
x
1
=
1
1
x
2
=
2
0
x
4
=
0
1
x
8
=8
---------------------
Всего:
11
---------------------
Hex:B
 
0001=
1
x
1
=
1
0
x
2
=
0
0
x
4
=
0
0
x
8
=0
---------------------
Всего:
1
---------------------
Hex:1
 
1101=
1
x
1
=
1
0
x
2
=
0
1
x
4
=
4
1
x
8
=8
---------------------
Всего:
13
---------------------
Hex:D
0111=
1
x
1
=
1
1
x
2
=
2
1
x
4
=
4
0
x
8
=0
---------------------
Всего:
7
---------------------
Hex:7
 
Шестнадцатерчный результат: B1D7
 
Вот это да! Ускоренный метод преобразования двоичного числа в шестнадцатеричное дал тот же результат, что и более полная версия. Опытные программисты очень часто применяют операции с шестнадцатеричными числами.