2013-02-21 29 views
3

C standardC中的整數升級會降級`long int`?

6.3.1.1

如果int可以表示原始類型(如由寬度限制 ,對於一個比特音響ELD)的所有值,該值被轉換爲INT; 否則,它被轉換爲一個unsigned int。這些被稱爲 整數促銷。

因此,這意味着,如果我在表達式中使用long int將被降級到unsigned int

+2

否 - 因爲int不能表示long int的「所有可能的值」。 – Floris 2013-02-21 04:49:45

+0

那麼,如果'long int'實際上比'int'大,反正... – zneak 2013-02-21 05:19:21

回答

3

你報的位由它上面的文字限制:

下可以在表達式中使用的任何地方可以使用int或unsigned INT:

  • 一個整型轉換等級小於int和unsigned int等級的整型對象或表達式。
  • 類型爲_Bool,int,signed int或unsigned int的位域。

如果一個int可以表示原始類型的所有值,則該值爲 轉換爲int;否則,它被轉換爲一個unsigned int。 這些被稱爲整數促銷。所有其他類型均不改變 由整數提升。

換句話說,long int沒有得到晉升爲intunsigned int

1

我認爲「原始類型」指的是「整數類型(除int或無符號整數) 其整數轉換等級小於或等於int的等級並且 unsigned int」,如前面6.3.1.1.2節所定義的那樣。不過,不錯的嘗試:)