
- •1.1 Базовые термины и определения#
- •1.2 Системы счисления
- •1.2.1 Двоичная арифметика&
- •1.3 Представление чисел в компьютере
- •1.3.1 Представление целых чисел
- •1.3.2 Целые числа со знаком
- •1.3.2.1 Представление "знак-и-число"
- •1.3.2.2 Дополнение до единицы
- •1.3.2.3 Дополнение до двух
- •1.3.2.4 Смещение на N
- •1.3.2.5 Сравнительная таблица представления целых чисел$
- •1.3.3 Числа с плавающей точкой. Стандарт IEEE-754
- •1.3.3.1 Смещение степени
- •1.3.3.2 Мантисса
- •1.3.3.3 Числа с плавающей запятой одинарной точности, 32 бита

местоположения, которое выделяется для размещения набора символов системы таким образом, чтобы байт С мог содержать 8, 9, 16 битов и т. д. Однако 8-битовый байт — это байт, используемый для описания работы чипов памяти, байт также используется для описания передачи данных.
8 битов представляют собой нумерацию от 7 до 0, осуществляемую слева направо. 7-й бит называется старшим битом, 0-й бит — младшим битом в байте. Каждый бит в байте соответствует показателю степени с основанием 2. Структура байта изображена на рис.1.
Номер бита: |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
|
|
|
|
|
|
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
|
|
|
|
|
|
|
|
|
Значение бита: |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Рисунок 1. Представление байта
На этом рисунке 128 — это 2 в 7-й степени, 64 — 2 в 6-й степени и т.д. Самое большое число, которое может представлять этот байт, - это число со всем набором битов, равных 1: 11111111. Запись этого двоичного числа следующая: 128+64+32+16+8+4+2+1 = 255.
Самое маленькое двоичное число — 00000000 или просто 0. Байт может хранить числа в интервале от 0 до 255 (256 возможных значений). При изменении интерпретации возможных значений байт может хранить числа в интервале от -128 до +127 (все равно 256 возможных значений).
1.3.2 Целые числа со знаком
Представление целых чисел со знаком определяется аппаратным обеспечением, а не операторами языка С.
Различают несколько представлений чисел со знаком:
●Знак-и-число
●Дополнение до единицы
●Дополнение до двух (двоичное дополнение)
●Смещение на N бит
1.3.2.1 Представление "знак-и-число"
Вероятно, самый простой способ представления числа со знаком состоит в том, чтобы зарезервировать 1 бит (старший бит), который для целого числа со знаком определяет знак числа, и при этом зарезервировать оставшиеся биты непосредственно для записи числа. В случае, если для хранения целого числа выделен один байт (для простоты рассмотрения), при таком представлении с величиной знака (sign-magnitude) 10000001 будет соответствовать -1, а 00000001 будет соответствовать 1. [Общий диапазон представляемых чисел - конечно, если для хранения числа будет выделен всего один байт - будет заключён между -127 и +127].
Так, например, число (-43)10 будет записано в данном представлении как 10101011.
Один из недостатков этого подхода состоит в наличии двух нулей: +0 и -0, что вызывает путаницу. К тому же для представления одного и того же значения используют два битовых шаблона.

1.3.2.2 Дополнение до единицы
Метод дополнения формирует значение отрицательного числа, инвертируя каждый бит в шаблоне. Например, 00000001 — это 1, а 11111110 — это -1. Этот метод также генерирует-0: 11111111. Диапазон значений, задаваемых одним байтом, изменяется от-127 до+127.
Таким образом, число (-43) должно быть записано как 11010100. Последовательность преобразования такова - сначала запишем модуль числа в двоичном виде: 4310 = 001010112.Поскольку число отрицательное, инвертируем все биты (или найдём такое число, при добавлении которого к вышеуказанному в сумме получатся все единичные биты): 11010100. Это и есть значение числа в представлении единичного дополнения.
Как и в представлении "знак-и-число", возникает проблема с представлением нуля двумя числами (11111111 (-0) и 00000000(+0)). Кроме того, есть сложности с арифметическими операциями. Представим, например, что нужно найти сумму двух чисел: (-1) и (+2). Эти числа записываются как 11111110 и 00000010 соответственно в используемом представлении. Если просуммировать числа обычным образом (поразрядно), получим:
11111110
+00000010
00000000 то есть ноль. Обратите внимание, что если цифру переноса добавить к ответу, получится
правильный ответ! 00000000 + 1 = 00000001.
Такое представление чисел использовалось в некоторых сериях компьютеорв PDP-1, UNIVAC 1100/2200 и др.
1.3.2.3 Дополнение до двух
Метод двойного дополнения лишён упомянутых выше недостатков и является наиболее общим методом, используемым на сегодня. Опять же, если для хранения целого числа выделен один бит, то значения от 0 до 127 представляются последними 7 битами, причём старший бит равен 0. При этом если старший бит i равен 1, то число будет отрицательным. Различие состоит в определении значения для этого отрицательного числа.
Вычтите битовый шаблон из отрицательного числа для 9-битового шаблона 100000000 (преобразованное в двоичную систему счисления десятичное число 256), результат и будет являться искомой величиной.
Возьмём в качестве примера шаблон 10000000. Для байта без знака ему соответствовало бы число 128. При работе с числом со знаком оно будет отрицательным (7-й бит установлен в 1) и будет представлено в виде 100000000 - 10000000 = 10000000 (128). Следовательно, это число -128. (Это число могло бы выражаться значением -0 для представления с величиной знака.) Аналогично 10000001 соответствует -127, а 11111111 соответствует -1. Метод позволяет представлять числа в диапазоне от -128 до +127.
Примечание: простейший метод для изменения знака при использовании двойного дополнения заключается в том, чтобы в двоичной записи числа поменять значения всех битов на обратные (т. е. 0 заменить на 1, а 1 — на 0), а затем прибавить к младшему биту 1. По скольку 1 соответствует 00000001, -1 — это 11111110+1, или 11111111, точно так же, как вы видели ранее.
Рассмотрим обоснование применения метода двоичного дополнения для представления целых чисел в большинстве современных компьютеров на примере. Сложим 0011 (3) и 1111 (-1), в результате получим кажущееся неверным значение 10010. Однако, игнорируя пятый бит (справа), получим верный ответ 0010 (2). Игнорирование пятого бита работает во всех случаях (за исключением переполнения разряда). Следовательно, при операциях с числами, записанными в представлении дополнения до двух, не требуется дополнительных действий

для определения значения результата (!), что и обусловило его повсеместное использование.
1.3.2.4Смещение на N
Всмещённом представлении используется некоторое предопределённое значение смещения N. Число записывается как беззнаковая величина, которая на N больше нужного значения. То есть 0 записывается как N, а -N представляется нулевым битовым шаблоном.
Например, в таблице ниже приведено представление "Смещение на 5":
Десятичное число |
Двоичное число |
Число в представлении |
|
|
"Смещение на 5" |
|
|
|
0 |
0000 |
-5 |
|
|
|
1 |
0001 |
-4 |
|
|
|
2 |
0010 |
-3 |
|
|
|
3 |
0011 |
-2 |
|
|
|
4 |
0100 |
-1 |
|
|
|
5 |
0101 |
0 |
|
|
|
6 |
0110 |
1 |
|
|
|
... |
... |
... |
|
|
|
15 |
1111 |
10 |
|
|
|
1.3.2.5 Сравнительная таблица представления целых чисел$
Для закрепления материала приведём сравнительную таблицу, в которой рассмотрим представления целых чисел (4-битовый шаблон) во всех упомянутых вариантах.
Десятичное |
Беззнаковое |
Знак-и-число |
Дополнение |
Дополнение |
Смещение на |
число |
целое |
|
до единицы |
до двух |
7 |
|
|
|
|
|
|
+8 |
1000 |
нет |
нет |
нет |
1111 |
|
|
|
|
|
|
+7 |
0111 |
0111 |
0111 |
0111 |
1110 |
|
|
|
|
|
|
+6 |
0110 |
0110 |
0110 |
0110 |
1101 |
|
|
|
|
|
|
+5 |
0101 |
0101 |
0101 |
0101 |
1100 |
|
|
|
|
|
|
+4 |
0100 |
0100 |
0100 |
0100 |
1011 |
|
|
|
|
|
|
+3 |
0011 |
0011 |
0011 |
0011 |
1010 |
|
|
|
|
|
|
+2 |
0010 |
0010 |
0010 |
0010 |
1001 |
|
|
|
|
|
|
+1 |
0001 |
0001 |
0001 |
0001 |
1000 |
|
|
|
|
|
|
(+)0 |
0000 |
0000 |
0000 |
0000 |
0111 |
|
|
|
|
|
|
(-)0 |
нет |
1000 |
1111 |
нет |
нет |
|
|
|
|
|
|
-1 |
нет |
1001 |
1110 |
1111 |
0110 |
|
|
|
|
|
|
-2 |
нет |
1010 |
1101 |
1110 |
0101 |
|
|
|
|
|
|
$ цит.по Wikipedia: Signed Number representations - http://en.wikipedia.org/