Представление данных в памяти компьютера.
Двоичные числа.Чтобы сделать ВС более надежными и простыми, их аппаратура строится из простейших электронных схем, которые могут находиться только в двух состояниях. Одно из них обозначается 0, а другое – 1. Такая схема предназначена для длительного или краткого хранения самой мелкой единицы информации – бита (от «BInary digiT» – двоичная цифра).
Любое число можно представить в виде цепочки битов. Такое представление числа называется двоичным числом. Цепочка из восьми битов называется байтом (рисунок 1.).
старший бит (бит 7) младший бит (бит 0)
Рисунок 1. Пример байта
Величина двоичного числа определяется относительной позицией каждого бита и его значением. Позиционный вес младшего бита 2о = 1(10). 1(10) – единица в десятичной системе счисления. Следующий бит имеет вес 21 = 2(10). Вес любой позиции получается удвоением веса предыдущей позиции (рисунок 2).
7 6 5 4 3 2 1 0 позиция
27 26 25 24 23 22 21 20
128 64 32 16 8 4 2 1 вес
Рисунок 2. Вес позиций байта
Машинным словом будем называть битовую строку длиной 16 битов. Одно слово содержит 2 байта (рисунок 3).
Каждый бит слова имеет свой вес (рисунок 4). Просуммировав все веса, найдем максимальное целое число без знака, которое можно записать в одно слово, оно равно 216 – 1 = 65535.
Двоичное содержимое байта или слова может рассматриваться (интерпретироваться) как число без знака и как число со знаком. Число без знака занимает все 16 битов слова или 8 битов байта. Оно может быть только положительным. Просуммируем два таких числа:
00111100 60
+ 00110101 + 53
01110001 113
Если слово (байт) содержит число со знаком, то в старшем бите содержится знак ( 0 есть +, 1 есть - ), а оставшиеся 15 или 7 битов содержат само число.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
старший байт младший байт
Рисунок 3. Структура машинного слова
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
128 64 32 16 8 4 2 1
32768 Рисунок 4. Вес позиций слова
Отрицательное число хранится в дополнительном коде. Для получения дополнительного кода числа из его абсолютного значения используется следующее правило:
все биты числа (в том числе и знаковый) инвертируются;
к полученному числу прибавляется 1. Например, получим дополнительный код числа –65.
65(10) = 01000001(2)
1) 10111110
2) + 1
10111111 = -65(10)
Для получения абсолютного значения отрицательного числа повторяют эти же самые два действия. Например:
-65(10)= 10111111
2) + 1
01000001 = 65(10)
Сумма +65 и –65 должна составить ноль:
01000001 (+65)
+ 10111111 (-65)
В данном примере у нас произошли два интересных переноса: 1) в знаковый (7-й) разряд; 2) за пределы байта. Первая единица переноса обрабатывается как обычно, а вторая теряется. Оба переноса считаются правильными.
Вычитание двух положительных чисел заменяется суммированием первого числа с дополнением второго. Таким образом, как суммирование, так и вычитание выполняет одно и то же аппаратное устройство – сумматор. Кроме этого достоинства использование дополнения имеет еще одно - число ноль имеет единственное представление, т.е. нет двух нулей – положительного и отрицательного.
Приведем целые числа в окрестностях 0:
+ 3 00000011
+ 2 00000010
+ 1 00000001
0 00000000
- 1 11111111
- 2 11111110
- 3 11111101
Отсюда видно, что нулевые биты в отрицательном двоичном числе фактически определяют его величину: рассмотрите весовые значения нулевых битов, как если бы это были единичные биты, сложите эти значения и прибавьте 1.
Шестнадцатеричные числа.В то время, как процессор и другие устройства ЭВМ используют только двоичное представление информации, такое представление очень неудобно для человека, который анализирует содержимое памяти ЭВМ. Введение шестнадцатеричных чисел значительно облегчает эту задачу.
Допустим, что мы хотим проанализировать содержимое четырех последовательных байтов (двух слов). Разделим мысленно каждый байт пополам и запишем для каждого полубайта соответствующее десятичное значение:
0101 1001 0011 0101 1011 1001 1100 1110
5 9 3 5 11 9 12 14
Чтобы не использовать для некоторых полубайтов две десятичные цифры, рассмотрим систему счисления: 10 = А, 11 = В, 12 = С, 13 = D, 14 = E, 15 = F. Теперь содержимое тех же самых четырех байтов выглядит более удобно:
59 35 В9 СЕ
Такая система счисления включает «цифры» от 0 до F и так как таких цифр 16, то она называется шестнадцатеричной. На рисунке 5 приведено соответствие между двоичными, десятичными и шестнадцатеричными числами от 0 до 15(10).
Двоичн. Десят. Шестн. Двоичн. Десят. Шестн.
0000 0 0 1000 8 8
0001 1 1 1001 9 9
0010 2 2 1010 10 А
0011 3 3 1011 11 В
0100 4 4 1100 12 С
0101 5 5 1101 13 D
0110 6 6 1110 14 Е
0111 7 7 1111 15 F
Рисунок 5. Соответствие между двоичными, десятичными
и шестнадцатеричными числами
Подобно двоичным и десятичным цифрам каждая шестнадцатеричная цифра имеет вес, кратный основанию счисления. Таким образом, каждая цифра имеет вес в 16 раз больше, чем соседняя справа цифра. Крайняя правая цифра имеет вес 160 = 1, следующая 161 = 16, 162 = 256, 163 = 4096, 164 = 65536.
Например, шестнадцатеричное число 3АF имеет десятичное значение:
(3 × 162) + (А × 161) + (F × 160) = (3 × 256) + (10 × 16) + (15 × 1) = 943
Для обозначения шестнадцатеричного числа часто используют букву Н (или h), например: 3AFh. Над шестнадцатеричными числами можно выполнять арифметические операции подобно тому, как они выполняются над десятичными числами. Например, найдем сумму 6Аh и B5h:
6A
+B5
|
Разность В5 – 6А: