2016-08-05 43 views
0

什麼是下面定義的字面積分的默認類型:在C++中以十六進制或八進制表示的積分文字的缺省類型是什麼?

0X123 /* hex , int ? unsigned int? long? unsigned long? */ 
0XFFFFFFFE /* hex , value is (2^32-2)=4294967294 .*/ 
/*octal */ /* value = 83*/ 
042747672777 /* octal , greater than 2^32*/ /* value=4691293695 */ 

我一些教程或書(我不記得源)閱讀,他們是通過符號int類型的默認值。那是對的嗎?

+0

是與u(無符號),h(短),l(長)。在參考文獻中查看它,因爲它構成了語言的基礎。 (最後一個包含非法的9,小x是常規的。) –

+0

@JoopEggen,沒有標準的'short'後綴。 – chris

+0

@JoopEggen,'短'不用於文字(我認爲)。 – foxtrot9

回答

3

積分文字的類型不是由十六進制文字,十進制文字或八進制文字定義,而是由文字的值定義。

表6 - C++ 11標準的2.14.2節中的整型常量類型列出了將用於捕獲整型文字的類型的順序。

十進制文字和十六進制和八進制文字之間的主要區別是類型十進制文字的順序是intlonglong long而類型十六進制和八進制文字的順序是intunsigned intlongunsigned longlong long ,和unsigned long long

+0

這意味着'0X123'是int,'0X4294967294'(2^32 -2)是無符號整數,'0X4294967297'(2^32 + 1)很長,'0123'是int,'042747672777'很長。 (考慮32位長,64位長) – foxtrot9

+0

@ foxtrot9你在混淆使用'0'和'0x'前綴。 '0X4294967294'當然不是'2 ** 32 - 2',它更大。 '0x123!= 123'。 – Holt

+0

@霍爾特,哦,我忘了。我會改變這一點。 – foxtrot9

相關問題