2013-04-01 32 views
22

根據this,而不類型後綴整數常量總是int秒。然而,gcc和clang都將0xffffffff(或任何明確設置除使用-以外的符號位的文字)解釋爲無符號。哪個是對的? (根據this的編譯器)是在C字面0xffffffff的int或unsigned ++

+0

我不知道,但我想知道爲什麼它很重要。 –

+0

@roger_rowland沒有,大概,但鐺警告我,從簽名到轉換籤署,這是惱人的和我不明白 – Walter

+0

我猜的一點是爲0xffffffff = 4294967295是正數,不適合在INT。 –

回答

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
+0

有趣。如果可能的話,請把報價鏈接到它的在線網頁上嗎? – deepmax

+7

@MM .:這是C++ 11標準(我正在使用草案3485,比官方標準稍微更新)。草案可從[here]免費下載(http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3485.pdf)。官方標準付費。 –