Правильно и неправильно, я бы сказал, так же, как и большая часть жизни: -)
Вы правы, заявив, что 011 + 010 = 101
. Ссылка, которую вы разместили, дала 100
значение -4
, которое является правильной интерпретацией этого значения, хотя и не является правильным значением.
Обычно можно получить переполненное значение, сложив два значения без с учетом переполнения, а затем вычтя диапазон (восемь для трехразрядного значения), если он больше половины диапазона меньше единицы.
Другими словами, 3 + 2 = 5
, но, поскольку это больше трех (половина диапазона меньше единицы), вы вычитаете диапазон 8
, чтобы получить -3
, то есть то, что ваш правильный бит шаблон, 101
:
Bit pattern Unsigned Signed
----------- -------- ------
000 0 0
001 1 1
010 2 2
011 3 3
100 4 -4
101 5 -3
110 6 -2
111 7 -1
Тем не менее, добавление средних битов (без переноса из правильных битов) действительно фактически дает результат с нулем и переносом одного.
Это означает, что перенос в MSB (левый бит) равен , действительно один. И, добавляя эти оставленные цифры (обе нули) с переносом единицы, вы получите одну с переносом нуля.
Может быть, вы читаете учебник по-другому для меня, но нам, возможно, придется воспользоваться этим сомнением здесь.