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

Пример 4.

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

Решение.

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

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

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

110=000 00012

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

000 00012

111 11102

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

Следствие (одна из причин, по которой обратный код редко употребляется).

Зададимся простым вопросом – сколько будет 1 + (-1). Очевидно, что 0.

Проверим это.

+1 в обратном коде будет 0000 0001

-1 в обратном коде будет 1111 1110

Сложим эти два числа.

0000 0001

1111 1110

1111 1111. Это число из примера, т.е. ответ оказался не 0, а -128.

В дополнительном коде, который будет рассмотрен ниже, этот недостаток сумели убрать.

Пример 5.

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

Решение.

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

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

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

100010=11 1110 10002

Дополним спереди нулями до 15 разрядов

100010=11 1110 10002 = 000 0011 1110 10002

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

000 0011 1110 10002

111 1100 0001 01112

Теперь «склеим» знаковый бит (1) и полученное число (111 1100 0001 01112). Получим 1111 1100 0001 01112. Для удобства записи запишем в 16ричной системе. FС1716.

В старшеконечной машине число будет 17FС16

В младшеконечной машине число будет FC1716.

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

В дополнительном коде могут храниться целые знаковые числа. Так же как и в обратном коде, старший бит является знаковым (1, если число отрицательное, и 0 – если число положительное)

Для положительных чисел дополнительный код полностью совпадает с обратным кодом (который совпадает с прямым кодом).

Дополнительный код отрицательного числа m равен 2k-|m|, где k - количество разрядов в ячейке. От сюда вытекает алгоритм получения дополнительного кода:

1. получить прямой код числа;

2. получить обратный код этого числа (инвертировать все биты).

3. к полученному числу прибавить 1.

Пример 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» в памяти машины.