Является ли литерал 0xffffffff int или без знака в C++
1 ответ
Решение
Согласно пункту 2.14.2/2 стандарта C++11,
Тип целочисленного литерала является первым из соответствующего списка в таблице 6, в котором может быть представлено его значение.
Таблица 6 сообщает, что для шестнадцатеричных констант тип должен быть:
int
; или (если не подходит)unsigned int
; или (если не подходит)long int
; или (если не подходит)unsigned long int
; или (если не подходит)long long int
; или жеunsigned long long int
,
Предполагая, что ваша реализация имеет 32-битный int
, поскольку 0xffffffff
не вписывается в int
, его тип должен быть unsigned int
, Для реализации с 64-битным int
тип будет int
,
Обратите внимание, что если бы вы вместо этого записали тот же литерал, что и десятичная константа, тип мог бы быть следующим:
int
; или (если не подходит)long int
; или (если не подходит)long long int
,