私は標準が次のとおりであることを知っています:
- 0 で始まる整数は 8 進数として解釈されます。
- 0x または 0X で始まる整数は、16 進数として解釈されます。
整数リテラルの型は、その値と表記法によって異なります。
- 10 進数はデフォルトで符号付きで、値が収まる最小の型の int、long、long long を持ちます。
- 16 進数と 8 進数は、signed または unsigned にすることができ、リテラル値が収まる最小の型の int、unsigned int、long、unsigned long、long long、unsigned long long を持ちます。
- short 型のリテラルはありませんが、これは接尾辞でオーバーライドできます。
しかし、VC++ はどうですか?! 10進数、8進数、16進数を同じように扱っているようで、10進数には符号なしの型も許可されています。
次のコードのようなもの:
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
これは予想されることであり、標準と異なる理由は何ですか?