Как унарный минус оператор работает с целочисленными литералами в C ++? - PullRequest
1 голос
/ 04 ноября 2019

Я прочитал, что десятичные литералы подписаны по умолчанию.
Для простоты предположим, что значения, которые может содержать int, являются целыми числами [-128,127], а long может содержать целое число 128. Теперь, чтопроизойдет, если я закодирую литерал -128? Что я знаю, так это то, что литерал здесь просто «128», который не может вписаться в int, а скорее в long! или унарный оператор минус делает что-то еще?
Итак, как унарный знак минус работает с целочисленными литералами?

1 Ответ

1 голос
/ 04 ноября 2019

С cppreference.com :

Тип целочисленного литерала - это первый тип, которому может соответствовать значение, из списка типов, который зависит от того, какой числовойbase и какой целочисленный суффикс был использован.

При использовании десятичной основы без суффикса, как в вашем примере, возможными типами являются int, long int и long long int. Если значение (игнорируя знак минус) помещается в long, но не в int, тогда тип значения - long.

После определения типа унарный оператор минусприменяется как обычно. Применение унарного минуса к long приводит к long (даже если результат может соответствовать int).

...