Представление целых чисел со знаком

Для представления как положительных так и отрицательных чисел используется так называемый дополнительный код –наиболее распространенный способ представления отрицательных целых чисел в компьютерах. Основным достоинством дополнительного кода является то, что в нем единообразно реализуются операции сложения чисел разных знаков (алгебраическое сложение), а операцию вычитания можно свести к операции сложения заменой знака вычитаемого на обратный. Дополнительный код отрицательного числа получается инвертированием двоичного числа и прибавлением к нему единицы (поэтому он и называется дополнительным).

Чтобы увидеть, как получается отрицательное число в дополнительном коде, вычтем из нуля единицу. Вычитание будем производить используя восьмиразрядную решетку:

 
 

 


–-
0

b
b
b

Мы получили число -1 в двоичном дополнительном коде. Чтобы убедится, что это в самом деле -1, сложим это число с 1:

 
 


+
1

b
b
b

Как и следовало ожидать мы снова получили 0.

При записи числа в дополнительном коде старший разряд является знаковым. Если его значение равно 0, то в остальных разрядах записано положительное двоичное число. Если же знаковый разряд равен 1, то в остальных разрядах записано отрицательное двоичное число, преобразованное в дополнительный код.

Посмотрим, как представляется первые последовательные числа при переходе через ноль (для чисел записанных в восьмиразрядную решетку):

0000 0000
-1 1111 1111
-2 1111 1110
-3 1111 1101
-4 1111 1100
-5 1111 1011

Для получения значения отрицательного числа все разряды инвертируются, а к результату добавляется единица. Обратное преобразование, то есть перевод из дополнительного в прямой код, осуществляется аналогично.

Получим отрицательное число −5, записанное в дополнительном коде.

Запишем 5 в двоичном виде, дописывая недостающие нули слева:

0000 0101

Инвертируем все разряды числа, получая таким образом обратный код:

1111 1010

Добавим к результату 1, получим искомый результат (−5 в дополнительном коде)

1111 1010 + 1 = 1111 1011

Для обратного преобразования используется тот же алгоритм. А именно:

Инвертируем все разряды числа

0000 0100

Добавим к результату 1 и получим снова положительное число 5

0000 0100 + 1 = 0000 0101

Числа с плавающей запятой (точкой)

В форме с плавающей запятой число представляется двумя компонентами: мантиссой и порядком. Мантисса используется для записи цифр числа, а порядок – для указания положения запятой.

Разрядная сетка машины в этом случае делится на несколько частей:

- один разряд – для кодирования знака числа (это всегда самый старший, левый, разряд слова);

- M разрядов – для записи мантиссы;

- Р разрядов – для записи порядка (с учетом его знака).

Местоположение запятой при этом тоже строго фиксируется: считается, что мантисса всегда представляется как число, меньшее единицы, но такое, в котором первая цифра после запятой для всех абсолютно чисел отлична от нуля (единственное исключение составляет число 0). Такая форма представления мантиссы называется нормализованной. Иначе говорят, что мантисса нормализована (приведена к виду: 1 < M <= 0,1).

Итак, число в форме с плавающей запятой представляется последовательностью битов без каких либо явно указанных разделителей, но функционально разбитой на три группы (знак числа, мантисса числа, порядок числа).

Рассмотренная форма кодирования числа приводит к следующим последствиям:

- Диапазон чисел, представимых в форме с плавающей запятой, определяется главным образом разрядностью порядка (Р).

- Разрядность мантиссы (М) определяет точное количество значащих цифр в изображении числа.

 

 

     

 

       
 
Порядок
 
Абсолютная величина мантисы
 


Покажем на примерах, как записываются некоторые числа в нормализованном виде в четырехбайтовом формате с семью разрядами для записи порядка.

 

Число 6.25

Преобразуем в двоичный вид

25

41+
6.25 = = = 11001b*2-2

 

Нормализуем, т.е. записываем в виде M * 2p , где 1 < M <= 0,1. Для нашего случая первую часть выражения (мантиссу) умножаем на 2-5 , а вторую на 25

11001b*2-2 = 11001b * 2-5 *2-2 * 25 = 0.11001b*23 = 0.11001b*211b

Выпишем представление числа в памяти.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1

 

       
 
   
Абсолютная величина мантиссы, 23 бита
 


Число –0.125

 
 
1


841+
–0.125 = – = –1*2-3

Нормализуем

–1*2-3 = –0.1*2-2

Отрицательный порядок записываем в дополнительном коде:

–0.1*2-2 = –0.1*2111111101

 

Теперь размещаем число в нашем четырехбайтовом формате

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1

 

       
 
   
Абсолютная величина мантиссы, 23 бита