在c++中是字面量0xffffffff为int或unsigned

Is the literal 0xffffffff int or unsigned in C++

本文关键字:0xffffffff int unsigned c++      更新时间:2023-10-16

由此可见,没有类型后缀的整数字面值总是int s。然而,gcc和clang都将0xffffffff(或任何显式设置符号位而不是使用-的文字)解释为无符号。哪个是正确的?(根据这个编译器)

根据c++ 11标准第2.14.2/2段,

整型字面值的类型是表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 .