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

Пример 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

Теперь прибавим к полученному числу 1. Получим 1000 00002. Т.к. у нас оставалось 7 бит для числа, то уберем старший бит. Получим 000 00002

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

Пример 4.

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

Решение.

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

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

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

110=000 00012

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

000 00012

111 11102

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

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

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

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

+1 в дополнительном коде будет 0000 0001

-1 в дополнительном коде будет 1111 1111

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

0000 0001

1111 1111

0000 0000. Это число равно +0, т.е. 0. Поэтому в дополнительном коде можно суммировать любые числа (положительные и отрицательные).

Замечание. Если быть более точным, то в данном сложении у нас «вышла» единица за 8ми разрядную сетку. Но при сложении чисел на языках высокого уровня это можно не учитывать.