Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Битовая логика.docx
Скачиваний:
2
Добавлен:
11.07.2019
Размер:
122.24 Кб
Скачать

Обратный код

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

Обратный код положительного числа совпадает с его прямым кодом. Чтобы получить внутреннее представление положительного целого числа А, хранящегося в n-разрядном машинном слове, необходимо:

1) записать в старший бит 0.

2) перевести число А в двоичную систему счисления;

3) полученный результат дополнить слева незначащими нулями до (n-1) разрядов

4) «склеить» знаковый бит и результат пункта 3.

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

Пример 1.

Перевести число 16 в обратный код, если это двухбайтовое знаковое число

Решение.

Т.к. это двухбайтовая величина, то для него отводится 16 разрядов. Поэтому ответ будет вида ХХХХ ХХХХ ХХХХ ХХХХ.

Т.к. 16 – положительное число, то старший бит будет равен 0. Поэтому ответ будет вида 0ХХХ ХХХХ ХХХХ ХХХХ, т.к. у нас «осталось» 15 бит для числа.

Переведем 16 в двоичную систему.

1610=100002. Т.к. у нас «осталось» 15 бит для числа, дополним полученное число нулями слево до 15 разрядов.

1610=100002=000 0000 0001 00002.

Теперь «склеим» знаковый бит (0) и полученное число (000 0000 0001 00002). Получим 0000 0000 0001 00002. Для удобства записи запишем в 16ричной системе. 001016. У этого числа старший бит равен «00», а младший бит – «10».

Если машина младшеконечная, то число будет храниться в виде «0010» в памяти машины.

Если машина старшеконечная, то число будет хранится в виде «1000» в памяти машины.

Пример 2.

Перевести число 100737027 в обратный код, если это четырехбайтовое знаковое число

Решение.

Т.к. это четырехбайтовая величина, то для него отводится 32 разряда. Поэтому ответ будет вида ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ.

Т.к. 100737027 – положительное число, то старший бит будет равен 0. Поэтому ответ будет вида 0ХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ ХХХХ, т.к. у нас «осталось» 31 бит для числа.

Переведем 100737027 в двоичную систему, дополнив нулями до 31 бита.

100737027 10=000 0110 0000 0010 0000 0000 00112=0601200316

Теперь «склеим» знаковый бит (0) и полученное число (000 0110 0000 0010 0000 0000 00112). Получим 0000 0110 0000 0010 0000 0000 00112. Для удобства записи запишем в 16ричной системе. 0601200316. В этом числе содержатся следующий байты:0616, 0116, 2016, 0316

Если машина младшеконечная, то число будет храниться в виде «0601200316» в памяти машины, т.к. порядок байт не меняется

Если машина старшеконечная, то число будет хранится в виде «0320010616» в памяти машины, т.к. порядок байт инвертируется.

Пример 3.

Перевести -128 в обратный код, если это однобайтовое знаковое число

Решение.

Т.к. это однобайтовая величина, то для него отводится 8 разрядов. Поэтому ответ будет вида ХХХХ ХХХХ.

Т.к. -128 – отрицательное число, то старший бит будет равен 1. Поэтому ответ будет вида 1ХХХ ХХХХ, т.е. у нас «осталось» 7 бит для числа.

Переведем 128 в двоичную систему.

12810=1000 00002

Т.к. это число отрицательное, то все биты в числе 128 необходимо инвертировать

1000 00002

0111 11112

Т.к. у нас оставалось 7 бит для числа, то уберем старший бит, т.к. он незначащий. Получим 111 11112

Теперь «склеим» знаковый бит (1) и полученное число (111 11112). Получим 1111 11112. Для удобства записи запишем в 16ричной системе: FF16.