Прямой двоичный код — это такое представление двоичного числа х, при котором знак «плюс» кодируется нулем в старшем разряде числа, а знак «минус» — единицей. При этом старший разряд называется знаковым.
Обратный кодполучается из прямого кода по следующему правилу:
Из приведенного выражения видно, что обратный код для положительных чисел совпадает с прямым кодом. Чтобы представить отрицательное двоичное число в обратном коде нужно оставить в знаковом разряде «1», во всех значащих разрядах заменить «1» на «0», а «0» на «1». Такая операция называется инвертированием и обозначается горизонтальной чертой над инвертируемым выражением.
Дополнительный кодобразуется следующим образом:
Видно, что дополнительный код положительного числа совпадает с прямым кодом, а для отрицательного числа получается инверсией всех значащих разрядов и добавлением единицы к младшему разряду результата. Дополнительный код может быть получен из обратного кода путём прибавления «1» к младшему разряду обратного кода (естественно, с учётом переносов между разрядами).
Пример 3.2. Найти прямой, обратный и дополнительный код числа 16910.
(прямой, обратный и дополнительный коды совпадают).
Пример 3.3. Найти прямой, обратный и дополнительный код числа -8710.
; ;
.
Для проверки можно выполнить сложение чисел из примеров 3.1 и 3.2 в прямом коде: .
3.3. Индикаторы переноса и переполнения
Рассмотрим пример сложения двух чисел в системе без знака и со знаком:
1111+0001=0000 () – в системе со знаком это верно; 0111+1=1000 () – перенос в знаковый бит – не верно.
Для учета таких явлений в процессоре существует два индикатора: индикатор переноса и индикатор переполнения. Каждый индикатор содержит 1 бит информации. Индикатор переноса указывает на перенос из знакового бита, а индикатор переполнения - на перенос в знаковый бит. Таким образом, после завершения операции, в которой происходит перенос в старший бит, процессор устанавливает индикатор переполнения.
Пример. 3.4. Рассмотрим сложение двух чисел 0101+0011=1000. В результате выполнения операции сложения произошел перенос в знаковый бит, а переноса из знакового бита не было. После этой операции индикатор переноса будет сброшен, а индикатор переполнения – установлен. Если рассматривать эти два числа, как целые без знака, то результат является арифметически правильным: , так как индикатор переноса сброшен. Если рассматривать числа в системе со знаком, то бит переполнения показывает, что произошло изменение знака (перенос в знаковый бит есть, а из него – нет), поэтому арифметический результат неправильный: .
Пример. 3.5. В результате сложения 1101+0101=0010 происходит перенос и в знаковый бит и из знакового бита. Поэтому будет установлен индикатор переноса, а индикатор переполнения – сброшен. Следовательно, в системе чисел без знака результат является арифметически неправильным: , а в системе чисел со знаком – правильным: .
Пример. 3.6. В результате сложения 0011+0010=0101 не происходит переноса ни в знаковый бит, ни из него. Поэтому оба индикатора переноса будут сброшены. Следовательно, в этом случае в обеих системах результат будет арифметически правильным: .
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2025) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление