Что такое унарный минус беззнакового нулевого целочисленного литерала в C ++? - PullRequest
0 голосов
/ 08 ноября 2019

Что происходит, когда я использую унарный минус с нулевым целым литералом без знака, например, -0u?

Стандарт C ++ 2003 г. в 5.3.1c7 гласит:

Отрицание числа без знака вычисляется путем вычитания его значения из 2 ^ n, где n - количество бит впродвинутый операнд.

Но в нулевом случае 2 ^ n - 0 = 2 ^ n, который не может вписаться, потому что значения, которые можно удерживать, равны [0,2 ^ n-1].

Итак, является ли использование унарного оператора минус с целым без знака нулем ошибочным? Или значение, которое в результате (2 ^ n) преобразуется по модулю, потому что мы пытаемся вписать значение вне диапазона в беззнаковое?

...