Числа в формате с фиксированной запятой
Рассмотрим особенности записи целых чисел со знаком на примере однобайтового формата, при котором для знака отводится один разряд, а для цифр абсолютной величины – семь разрядов.
В компьютерной технике применяются три формы записи (кодирования) целых чисел со знаком: прямой код, обратный код, дополнительный код.
Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково – двоичными кодами с цифрой 0 в знаковом разряде.
Примеры: Число 1 Число 127
Знак числа “+” Знак числа “+”
Отрицательные числа в прямом, обратном и дополнительном кодах имеют разное изображение.
Прямой код. В знаковый разряд помещается цифра 1, а в разряды цифровой части числа – двоичный код его абсолютной величины.
Примеры:
Прямой код числа –1. Прямой код числа -127
1 |
Знак числа “-“ Знак числа “-“
Обратный код получается инвертированием всех цифр двоичного кода абсолютной величины числа, включая разряд знака: нули заменяются единицами, а единицы – нулями.
Примеры:
Число: -1 Число: -127
Код модуля числа: 0 0000001 Код модуля числа: 0 1111111
Обратный код числа: 1 1111110 Обратный код числа: 1 0000000.
Дополнительный код получается образованием обратного кода с последующим прибавлением единицы к его младшему разряду.
Примеры:
Дополнительный код числа –1 Дополнительный код числа –127
Обычно отрицательные десятичные числа при вводе в машину автоматически преобразуются в обратный или дополнительный двоичный код и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе таких чисел из машины происходит обратное преобразование в отрицательные десятичные числа.
Сложение и вычитание. В большинстве компьютеров операция вычитания заменяется сложением уменьшаемого с обратным или дополнительным кодом вычитаемого. Это позволяет упростить конструкцию арифметико-логического устройства.
При сложении обратных кодов чисел А и В имеют место четыре основных и два особых случая. Рассмотрим их.
Случай 1. А и В положительные. При суммировании складываются все разряды, включая разряд знака. Так как знаковые разряды положительных слагаемых равны нулю, разряд знака суммы тоже равен нулю.
Десятичная запись: Двоичные коды:
3 0 0000011
7 0 0000111
10 0 0001010
Случай 2. А положительное, В отрицательное и по абсолютной величине больше, чем А.
Десятичная запись: Двоичные коды:
3 0 0000011
-10 1 1110101 обратный код числа –10
-7 1 1111000 обратный код числа –7
Получен правильный результат в обратном коде. При переводе в прямой код биты цифровой части результата инвертируются: 1 0000111.
Случай 3. А положительное, В отрицательное и по абсолютной величине меньше, чем А.
Десятичная запись: Двоичные коды:
10 0 0001010
-3 1 1111100 обратный код числа -3
7 0 0000110
+ 1
0 0000111
Компьютер исправляет полученный первоначально неправильный результат (6 вместо 7) переносом единицы из знакового разряда в младший разряд суммы.
Случай 4. А и В отрицательные.
Десятичная запись: Двоичные коды:
-3 1 1111100 обратный код числа –3
-7 1 1111000 обратный код числа –7
-10 1 1110100
+ 1
1 1110101 обратный код числа –10
Полученный первоначально неправильный результат (обратный код числа –11 вместо обратного кода числа –10) компьютер исправляет переносом единицы из знакового разряда в младший разряд суммы. При переводе результата в прямой код биты цифровой части инвертируются: 1 0001010.
При сложении может возникнуть ситуация, когда старшие разряды результата операции не помещаются в отведенной для него области памяти.
Это вызывает несовпадение знака суммы и знаков слагаемых, что является свидетельством переполнения разрядной сетки формата числа.