我知道的标准如下:
- 以 0 开头的整数被解释为八进制。
- 以 0x 或 0X 开头的整数被解释为十六进制。
整数字面值的类型取决于其值和表示法:
- 十进制默认为有符号整型,类型为 int、long、long long 中最小的适合该值的类型。
- 十六进制和八进制可以是有符号或无符号的,并且类型为 int、unsigned int、long、unsigned long、long long、unsigned long long 中最小的适合该字面值的类型。
- 没有类型为 short 的字面值,但这可以通过后缀进行覆盖。
但 VC++ 如何处理呢?!它似乎将十进制、八进制和十六进制视为相同,并且对于十进制也允许无符号类型。
像下面的代码一样:
cout << typeid(4294967295).name() << endl;
cout << typeid(4294967296).name() << endl;
cout << typeid(0xffffffff).name() << endl;
cout << typeid(0x100000000).name() << endl;
提供:
unsigned long
__int64
unsigned int
__int64
这是否是预期的,为什么与标准不同?