-3 + -3 = -2 в двух дополнениях
Используя 4-битные числа, вычисляя -3 + -3 в дополнение к двум, мой расчет дает -2.
3 в двоичном коде - 0011
сделав оба дополняют друг друга путем переключения всех цифр, так как оба являются отрицательными
1100 && 1100
добавив один к ним, так как мы используем два дополнения
1101 + 1101 =
11010
первый - переполнение, и выбрасывается в дополнение к двум. Так что осталось с 1010, что является минус два в десятичной. Может кто-нибудь объяснить, что сделано неправильно в этом процессе?
РЕДАКТИРОВАТЬ
Моя проблема выглядит более конкретно, как интерпретировать результат вычисления дополнения до двух. Я отношусь к результату следующим образом:
Результат равен 1010. В моем мире первый бит является знаковым битом, указывающим, что число отрицательное. Следующие 0 означают, что есть 0 из -4, следующие 1 означают, что есть 1 из -2, следующие 0 означают, что есть 0 из -1
поэтому я интерпретирую это как результат -2
2 ответа
Результат верный, вы просто неверно истолковали его. Когда вы выполняете арифметику с числами в дополнении к двум, результат также является дополнением к двум. Таким образом, преобразование из отрицательного в положительное выполняется так же, как преобразование исходных чисел из положительного в отрицательное.
Учитывая 4-битное двоичное значение 1010
, сначала переверните биты для своего дополнения, чтобы получить 0101
, затем добавьте 1 для дополнения до двух, чтобы получить 0110
,
0110
6, так 1010
это -6.
первый переполнен
Если, как вы здесь подразумеваете, вы ограничиваете свое хранилище одним nybble, то с дополнением до двух вы можете представлять значения в диапазоне -8
в 7
,
-2
будет 0b1110
Это не то, что у вас есть. -6
это действительно 0b1010
, которая является правильной суммой.