Отбрасывает 1
. Условие аналогично Arithmetic Overflow.
Прочность двух дополнений состоит в том, что это помогает нам сохранить двоичное представление, когда должны учитываться числа с цифрами, поскольку в математике значение 0
такое же, как и у -0
. Если нам нужно отказаться от одного целого бита только для знака, то в 4-битном слове 0000
будет обозначать 0
, а 1000
будет обозначать -0
, растрачивая одно представление. Компонент двух помогает избавиться от этого. Если мы предположим, 4-битовые слова: val -val bits of val two's complement bits of -val (1's complement + 1) 0 0 0000 0000 (1111+0001) 1 -1 0001 1111 (1110+0001) 2 -2 0010 1110 (1101+0001) 3 -3 0011 1101 (1100+0001) ... 7 -7 0111 1001 (1000+0001) 8 -8 (no rep) 1000 (0111+0001)
(обратите внимание, что для -8
у вас есть свое дополнение 8
в беззнаковых образом, т.е. 8 = 1000
и, следовательно, его поразрядного дополнения является 0111
).
Таким образом, вы получаете представление для -8
путем 0
и -0
имеют один и тот же битовый шаблон, т.е. 0000
. Используя это, для n
бит мы можем представить все целые значения между -2^(n-1)
по 2^(n-1)-1
.