Короткий ответ -10 не может быть представлена в виде 4-битового целого числа в двоичном коде комплимента. Вы получаете переполнение - обратите внимание, что бит знака для 0110
равен 0! (То же самое верно и в отношении 9 - примечание, что бит знака равен 1.)
Настоящий ответ заключается в том, что если вы делаете это вручную, вам нужно выделить буфер, достаточно большой для обработки вашего ввода (и вывод). Если вы используете 8 бит, например, должно быть ясно, что происходит:
- 9 =
00001001
- -10 = двойки комплимент
00001010
= 11110101
+ 00000001
= 11110110
00001001
+ 11110110
= 11111111
= -1
Теперь, как говорится, если вы игнорируете о verflow логика позади математики все еще работает:
1111
не является 15 для 4-разрядного целого числа со знаком. Знак бит (самый старший бит) равен 1, что указывает на отрицательный результат, поэтому вам нужно интерпретировать его как отрицательный номер комплимента двух, в данном случае -1.
Обратите внимание, что 1111
15 для 4-битового беззнаковых целого числа, а также больших размера подписал целые числа (которые будут в действительности быть 00...01111
и бит знака равно 0).
Интересно отметить, что если вы интерпретируете те же цифры, что и без знака, математика все еще работает. И, таким образом, это красота до двух комплимента:
- Binary:
1001
+ 0110
= 1111
- Подпись (переполнение): (!)
9
+ -10
(!) = -1
- Unsigned:
9
+ 6
= 15
- Signed (правильный):
-7
+ 6
= -1
Поэтому крайне важно, вы последовательны в подписанном Несс на протяжении всей операции/программы. В вашем заявлении «9 = 1001 и -10 = 0110 он приходит как окончательно 1111. = 15» вы смешиваете подписанную интерпретацию (-10 = 0110
) - игнорируя переполнение курса - без знака (1111
= 15) , что приводит к ошибке.
Благодарим вас за разъяснение – user306128
Пожалуйста, примите решение (http://meta.stackexchange.com/a/5235/155831), если оно помогло решить проблему. Также просмотрите остальные вопросы [перечисленные в вашем профиле] (http://stackoverflow.com/users/4101535/user306128) и посмотрите, можете ли вы выбрать правильный ответ для них. Это помогает всем. –