Дополнительный код

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Дополнительный код (англ. two’s complement) используется в Каллисто для машинного представления целых чисел со знаком (англ. signed integer). Это та же система кодирования чисел «дополнение до двух», что используется в микроконтроллере ЭКВМ и всех персональных компьютерах с процессорами фирмы «Интел».

Старший бит определяет знак числа. Если старший бит равен нулю, число считается положительным, а его абсолютное значение (модуль) совпадает с тем, как записываются беззнаковые целые числа (англ. unsigned integer).

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

Целые числа в стеке

Целые 32-битные числа представляются в десятичном стеке, как целые числа со знаком (англ. signed integer) в дополнительном коде. Целое число, все 32 бита которого установлены, представляется в стеке числом -1.

Стек данных содержит десятичные числа. При корректных расчётах этим можно пренебречь, но при арифметическом переполнении результат отличается от результата при переполнении двоичных машин.

32-битные числа (как со знаком, так и без знака) могут безошибочно записываться из стека в десятичные регистры и переменные с помощью слов ! и TO, а также считываться из них обратно. Для считывания в стек 32-битного целого из десятичного регистра служит слово @.

Целые числа в двоичной ячейке памяти

Двоичная ячейка памяти состоит из двух байт и хранит 16-битные двоичные целые числа. Для хранения в такой ячейке чисел со знаком Каллисто использует дополнительный код. Старший байт числа хранится в первом байте ячейки, при этом его старший бит является знаковым — для положительных чисел значение первого байта меняется от 0 до 127, для отрицательных от 128 до 255.

Таблица показывает, как некоторые целые числа со знаком записываются в двух байтах ячейки памяти Каллисто:

Число Первый байт ячейки Второй байт ячейки
0 0 0
+1 0 1
+2 0 2
+255 0 255
+256 1 0
+257 1 1
+258 1 2
+32766 127 254
+32767 127 255
-1 255 255
-2 255 254
-255 255 1
-256 255 0
-257 254 255
-258 254 254
-32767 128 1
-32768 128 0

Ссылки