Что происходит, когда я использую унарный минус с нулевым целым литералом без знака, например, -0u
?
Стандарт C ++ 2003 г. в 5.3.1c7 гласит:
Отрицание числа без знака вычисляется путем вычитания его значения из 2 ^ n, где n - количество бит впродвинутый операнд.
Но в нулевом случае 2 ^ n - 0 = 2 ^ n, который не может вписаться, потому что значения, которые можно удерживать, равны [0,2 ^ n-1].
Итак, является ли использование унарного оператора минус с целым без знака нулем ошибочным? Или значение, которое в результате (2 ^ n) преобразуется по модулю, потому что мы пытаемся вписать значение вне диапазона в беззнаковое?