Является ли литерал 0xffffffff int или без знака в C++

В соответствии с этим целочисленные литералы без суффикса типа всегда ints. Тем не менее, и GCC и Clang интерпретировать 0xffffffff (или любой литерал, который явно устанавливает бит знака, кроме использования -) как без знака. Что правильно? (в соответствии с этим составители)

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,
Другие вопросы по тегам