2015-09-17
|
0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |
А число -11810 будет отличаться лишь первым "знаковым" битом, который на этот раз будет равен 1
1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |
Запомните способ кодирования целых чисел со знаком, когда код положительного отличается от кода своего отрицательного эквивалента только знаковым битом (0 или 1) называется прямым кодом.
Недостатки прямого кода:
1. Наличие +0 и -0. В прямом коде десятичному числу 0 соответствуют 2 кода: 00000000 и 10000000. Это неизбежно приводит к "ступору" любого электрического сумматора.
2. Операция суммирования числа со своим отрицательным эквивалентом не приводит к получению нуля. Например, просуммируем числа +5 и -5:
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
100010102 = -1010
Как видите в результате суммирования получили -1010. Это является абсолютно недопустимым для технических устройств.
Обратный код для целых чисел со знаком
В обратном коде для обозначения знака также выделяется старший бит, но отрицательный эквивалент числа формируется по другому. Для образования кода отрицательного числа нужно изменить "знаковый" бит на 1, но кроме того нужно инвертировать все биты числа (0 заменить 1, и наоборот)
Рассмотрим числа +5 и -5:
+5: 0 00001012
-5: 1 11110102
Что мы имеем в результате суммирования +5 и -5?
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Все единицы кода - это отрицательный ноль, т.к. он образовался из положительного нуля путем инвертирования всех битов
Вывод по обратному коду:
Устранен один из недостатков прямого кода - при суммировании положительного и эквивалентного отрицательного числа получается ноль,
Но недостаток, связанный с наличием двух нулей не устранен: в обратном коде имеются два нуля: 000000002 и 111111112
Следовательно эта система представления не подходит для технических устройств.
Дополнительный код целых чисел со знаком
В дополнительном коде отрицательны эквивалент положительного числа образуется в два приема:
1. У положительного двоичного числа инвертируются биты (т.е. получаем обратный код числа)
2. К получившемуся числу прибавляется 1.
Посмотрим теперь на двоичные коды чисел +5 и -5 в дополнительном коде:
+5: 0 00001012
Получим дополнительный код числа -5:
1. Получаем обратный код от положительного числа +5 (переворачиваем биты) : 1 1111010
2. К получившемуся двоичному числу прибавляем 1 в 8-и битовом представлении (1 = 000000012)
Получим дополнительный код:
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
Т.е. число -5 в дополнительном коде имеет код: 1 11110112.
Проверим получится ли ноль при суммировании +5 и -5?
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Прекрасно!!! Наконец-то мы получили заветный ноль! Теперь мы знаем, что дополнительный код должен подойти для компьютерной техники.
А как насчет двойного нуля? Есть ли в дополнительном коде -0? Давайте из +0 получим его дополнительный код:
+0: 0000 0000
1. Обратный код: 1111 11112
2. Прибавляем двоичную единицу 0000 00012
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Получили тот же самый исходный код для положительного нуля. Следовательно отрицательного нуля в дополнительном коде не существует, т.к. его невозможно получить из положительного нуля.
Интересный факт!!! Получается в 8-и битовом представлении мы имеем общее количество всевозможных чисел со знаком: 28 = 256. Из них ровно половина (128) имеют старшим битом 0 - это положительные числа, а другая половина (128) имеют старшим битом 1. НО!!! Есть одно важное "НО". Дело в том что в число положительных 128 чисел входит и число 0: 0000 00002. А это значит, что остальных положительных чисел будет не 128, а 127, а вот отрицательного нуля нет, поэтому все 128 отрицательных чисел являются отрицательными целыми числами, отличными от нуля. Самое большое отрицательное число будет -1, а самое маленькое отрицательное число: -128. Получим двоичное представление этих двух чисел в двоичном коде:
Найдем код числа -1 (в дополнительном коде):
1. Берем +1 в двоичном коде (0000 00012)
2. Инвертируем биты: 1111 1110
3. Прибавляем двоичную единицу: 1111 1110 + 0000 0001 = 1111 11112
Найдем код числа -127 (в дополнительном коде):
1. Берем код числа +127: 0111 11112 (Это самое большое положительное число, поэтому старший - знаковый - бит равен 0, а остальные биты равны 1).
2. Инвертируем все биты и получаем: 1000 0000.
3. К получившемуся числу прибавляем 1:
1000 0000 + 0000 0001 = 1000 00012.
Проанализуруем, что мы выяснили. Код -1: 1111 11112, код -127: 1000 00012. А теперь самое интересное. Сейчас уже понятно, что все остальные отрицательные числа от -1 до -127 будут иметь старшим битом всегда 1, а остальные биты будут всевозможными комбинациями нулей и единиц. А что же тогда за число 1000 00002? Старший его бит равен 1, т.е. число отрицательно. А теперь давайте посмотрим на двоичный код числа -127 и увидим что число 1000 00002 как раз на 1 меньше кода числа -127: 1000 00012 . А раз так, то отнимаем от числа -127 единицу и получаем, что это ничто иное как затерявшееся число -128. Мы его не могли получить из числа +128, т.к. числа +128 попросту не существует, поэтому пришлось прибегнуть к таким косвенным рассуждениям.
Запомните: в дополнительном коде наименьшее отрицательное число при любом размере ячейки всегда старшим битом будет иметь 1, а остальные биты будут нули.
Запомните: в дополнительном коде значащих положительных чисел всегда на 1 меньше чем значащих отрицательных, т.к. в число положительных чисел входит 0, а среди отрицательных чисел нуля нет.
Вещественные числа со знаком в двоичном коде могут быть закодированы двумя способами:
1. Двоичный код с фиксированной запятой.
2. Двоичный код с плавающей запятой.
В двоичном коде с фиксированной запятой ячейка памяти (например 8-и битовая ячейка) делится на 3 неравные части:
1-я часть - это один старший (знаковый) бит - он отвечает за знак числа (0 - число положительное, 1 - число отрицательное).
2-я часть - самая большая часть, напимер 5 битов - отводятся под целую часть числа (т.е. числа слева от запятой).
3-я часть - вторя по величине - это оставшиеся 2 бита - они предназначены для дробной части числа.
"А где-же находится запятая" - спросит пытливый компьютерщик. А для запятой места не нашлось - и не нужно на нее тратить полезные биты. Мы и так договорились с компьютером, чтобы он понимал, что запятая скрывается между битами целой части и битами дробной части.
article
Добро пожаловать,
гость сайта!
8 САМЫХ ОПАСНЫХ ХАКЕРОВ ВСЕХ ВРЕМЕН
06. Часы на PascalABC
Устройство компьютера 2. Процессор (8кл)
Цветовые палитры RGB и СMYK (9кл)
Кодирование графической информации (9кл)
Создание графического калькулятора на языке программирования Python и создание исполняемого файла.
Правомерно ли вменять в обязанность учителя писать конспект урока
Физкультминутка
Благодарственное письмо главы г.о. Солнечногорск за добросовестный труд
Грамота за подготовку призеров муниципального конкурса детского рисунка в 2020г.
Сегодня сайт уже посетили 25 чел.
Количество всех статей на сайте: 498.
Количество online-тестов: 211.