在C ++中是文字0xffffffff int还是unsigned

时间:2013-04-01 13:21:51

标签: c++ integer literals

根据this,没有类型后缀的整数文字总是int s。但是,gcc和clang都将0xffffffff(或任何明确设置符号位的文字除了使用-)解释为无符号。哪个是对的? (根据编译器的this

1 个答案:

答案 0 :(得分:25)

根据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