Целые числа со знаком обычно занимают в памяти компьютера один, два или четыре байта. Для хранения целых чисел со знаком старший (левый) разряд в машинном слове отводится под знак числа (если число положительное, то в знаковый разряд записывается ноль, если число отрицательное – единица).
Для представления отрицательного числа используется дополнительный код. Дополнительный код положительного числа совпадает с его прямым кодом.
Прямой код целого положительного числа может быть получен следующим образом: число переводится в двоичную систему счисления, а затем его двоичную запись слева дополняют необходимым количеством нулей в соответствии с разрядностью машинного слова. Например, прямой код числа 3710=1001012 в 16-разрядной ячейке будет иметь вид 0000000000100101.
Способ 1. Для записи внутреннего представления целого числа (-а) со знаком необходимо:
1. модуль числа записать в прямом коде в n двоичных разрядах;
2. получить обратный код числа, для этого значения всех бит инвертировать – все единицы заменить на нули и все нули заменить на единицы;
|
|
3. к полученному обратному коду прибавить единицу. Получим дополнительный код целого числа со знаком.
Пример. Внутреннее представление целого отрицательного числа -1607 в 16-разрядной ячейке запишется следующим образом: 1111 1001 1011 1001. Так как:
1. а) |-1607|=160710=110010001112;
б) прямой код в 16-разрядной ячейке: 0000 0110 0100 0111;
2. обратный код: 1111 1001 1011 1000;
3. дополнительный код (результат прибавления 1): 1111 1001 1011 1001;
Ответ: 1111 1001 1011 1001– внутренне двоичное представление числа (-1607).
Способ 2. Для записи внутреннего представления целого числа со знаком (-а) необходимо:
1. перевести число a-1 в двоичную систему счисления;
2. сделать инверсию битов: заменить все нули на единицы и единицы на нули в пределах разрядной сетки.
Пример. Внутреннее представление целого отрицательного числа -17 в 8-разрядной ячейке запишется следующим образом: 1110 1111. Так как:
1. переводим число а-1 в двоичную систему счисления:
17-1=16
1610=100002
прямой код в 8-разрядной ячейке: 0001 0000;
2. заменяем все нули на единицы и единицы на нули: 1110 1111.
Ответ: 1110 1111 – внутренне двоичное представление числа (-17).