Читайте также:
|
|
Для записи внутреннего представления целого отрицательного числа (-N) необходимо:
1) получить внутреннее представление положительного числа N;
2) получить обратный код этого числа заменой 0 на 1 и 1на 0;
3) к полученному числу прибавить 1.
Данная форма представления целого отрицательного числа называется дополнительным кодом. Использование дополнительного кода позволяет заменить операцию вычитания на операцию сложения уменьшаемого числа с дополнительным кодом вычитаемого.
Двоичные разряды в ячейке памяти нумеруются от 0 до k справа налево. Старший, k-й разряд во внутреннем представлении любого положительного числа равен нулю, отрицательного числа – единице. Поэтому этот разряд называется знаковым разрядом.
Для представления отрицательного двоичного числа необходимо инвертировать все биты и прибавить 1.
Рассмотрим пример:
Число 65 | |
Инверсия | |
Плюс 1 | 10111111 (равно -65) |
Если прибавить единичные значения к числу 10111111, 65 не получится. Фактически двоичное число считается отрицательным, если его старший бит равен 1. Для определения абсолютного значения отрицательного двоичного числа, необходимо повторить предыдущие операции: инвертировать все биты и прибавить 1:
Двоичное значение | |
Инверсия | |
Плюс 1 | 01000001 (равно +65) |
Сумма +65 и -65 должна составить ноль:
(+65) | |
(-65) | |
(1)00000000 |
Все восемь бит имеют нулевое значение. Перенос единичного бита влево потерян. Однако, если был перенос в знаковый разряд и из разрядной сетки, то результат является корректным.
Двоичное вычитание выполняется просто: инвертируется знак вычитаемого и складываются два числа. Вычтем, например, 42 из 65. Двоичное представление для 42 есть 00101010, и его двоичное дополнение: - 11010110:
+(-42) | |
(i)00010111 |
Результат 23 является корректным. В рассмотренном примере произошел перенос в знаковый разряд и из разрядной сетки.
Если справедливость двоичного дополнения не сразу понятна, рассмотрим следующие задачи: Какое значение необходимо прибавить к двоичному числу 00000001, чтобы получить число 00000000? В терминах десятичного исчисления ответом будет -1. Для двоичного рассмотрим 11111111:
Результат | (1)00000000 |
Игнорируя перенос (1), можно видеть, что двоичное число 11111111 эквивалентно десятичному -1 и соответственно:
-(+1) | -00000001 |
-1 |
Можно видеть также, каким образом двоичными числами представлены уменьшающиеся числа:
+3 | |
+2 | |
+1 | |
-1 | |
-2 | |
-3 |
Фактически нулевые биты в отрицательном двоичном числе определяют его величину: рассмотрите позиционные значения нулевых битов как если это были единичные биты, сложите эти значения и прибавьте единицу.
Дата добавления: 2014-12-19; просмотров: 124 | Поможем написать вашу работу | Нарушение авторских прав |