我知道标准如下:
- 以 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
这是预期的吗?为什么它与标准不同?