
- •Представление целых чисел в компьютере.
- •Представление целых чисел в беззнаковых целых типах.
- •Представление целых чисел в знаковых целых типах.
- •Прямой код числа.
- •Дополнительный код числа.
- •Алгоритм получения дополнительного кода отрицательного числа.
- •Проверка
- •Знак числа в дополнительном коде
- •Перенос и переполнение
Алгоритм получения дополнительного кода отрицательного числа.
Для получения дополнительного k-разрядного кода отрицательного числа необходимо
модуль отрицательного числа представить прямым кодом в k двоичных разрядах;
значение всех бит инвертировать:все нули заменить на единицы, а единицы на нули(таким образом, получается k-разрядный обратный код исходного числа);
к полученному обратному коду прибавить единицу.
Пример: Получим 8-разрядный дополнительный код числа -52:
00110100 - число |-52|=52 в прямом коде
11001011 - число -52 в обратном коде
11001100 - число -52 в дополнительном коде
Можно заметить, что представление целого числа не очень удобно изображать в двоичной системе, поэтому часто используют шестнадцатеричное представление:
1100 1100
С С
Проверка
52 + (-52) = ?
00110100
+
11001100
------------
1 00000000
При сложении получили 9-ти разрядное число, но так как разрядная сетка (один) байт состоит только из 8-ми бит, то старший бит, просто, теряется, и в результате получается число 0. Проверим 52 + (-52) = 0.
Знак числа в дополнительном коде
В дополнительном коде числа, строго говоря, отсутствует отдельный разряд знака. То, что все отрицательные числа, представленные в дополнительном коде, имеют единицу в старшем разряде, а положительные числа -- имеют в старшем разряде ноль, является только свойством дополнительного кода. Не должно вводить в заблуждение и употребляемое определение старшего разряда как "знакового". На самом деле, знак и "абсолютная величина" в дополнительном коде связаны воедино и неразделимы.
Это понимание особенно важно при преобразовании числа со знаком, представленного, например, в одном байте (ShortInt) в двухбайтовый формат (Integer):
Исходное число ShortInt, равное минус 38 , представленное в одном байте:
-
1
1
0
1
1
0
1
0
Правильно преобразованное в двухбайтовый формат представление того же самого числа "минус 38" в двухбайтовом формате (Integer):
-
старший байт
младший байт
1
1
1
1
1
1
1
1
1
1
0
1
1
0
1
0
То есть, правильным действием при увеличении разрядности слова, в которое записывается число в дополнительном коде является "распространение знака" на добавившиеся разряды.