2016-10-22 3 views
0

Хорошо, это может быть глупый вопрос. Но здесь все идет.Назначение значений вне диапазона (отрицательных) для неподписанных целых типов

Если я присваиваю отрицательное значение неподписанному интегральному типу в C++, например, «unsigned short a = -1».

Значение a в приведенном выше примере установлено равным 65535 (2^16 - 1). И я знаю, что если бы я установил значение вне диапазона для целого числа без знака, то установленное значение будет модулем числа с максимальным размером памяти (65536 в этом случае), можете ли вы объяснить, что математика была разработана за сцены?

Как есть (-1) modulo 65536 = 65535? Разве это не должно быть -1?

ответ

0

Это разница в 1 бит MSB. В подписанном, это 1 бит используется для хранения отрицательности числа. Пока в unsigned, это используется для хранения значения. Его не математика, которая работает внутренне, ее в основном манипуляции с шаблоном, что делает разницу между ними.

Смежные вопросы