2014-04-14 57 views
1

是什麼 long int numberOfPoints = 131071100;long int numberOfPoints = 131071100L;數據類型`long` C編程

之間的差異,是 int numberOfPoints = 131071100L; 法律這樣的任務?如果這與前兩者有什麼不同?

+0

如果你真的需要「長」(而不是「INT」 ),那麼你*必須*聲明(所有!)你的長變量「長」,你*必須*聲明你的整數文字「L」。或者你冒着「悄悄截斷」其中一個的風險。 – FoggyDay

+1

如果沒有後綴,可能會發生類似[this](http://stackoverflow.com/questions/21295313/cant-assign-2147483648-to-variable-of-type-long-long?rq=1)的情況。 – Dan

+0

,但是有必要將它聲明爲'long int numberOfPoints = 131071100L;'是否有必要聲明帶有'long'前綴和附加在數字末尾的'L'的變量?或者是否聲明'long int numberOfPoints = 131071100;'或'int numberOfPoints = 131071100L;'完成相同的任務(使其成爲'long'變量)? – Justin

回答

1

(這裏的一個前面的答案不正確,並且已被修正。)

每ANSI C的規範(類似的語言在C99和C++規範存在):

類型的整數常數的是其中可以表示其值的相應列表 中的第一個。

無後綴十進制:int和long 整型,unsigned long int類型。

後綴八進制或十六進制:整型,無符號 整型,長整型,unsigned long int類型。

用字母u或U加後綴:unsigned int,unsigned long int。

由字母l或L添加後綴:長 整型,unsigned long int類型。

由字母u或U和l或L作爲後綴:unsigned long int。

因此,兩個表達式之間不會有任何區別,因爲C保證常量的類型足夠長以保存該值。

3

的類型等131071100一個無後綴整數常數是第一的intlong intlong long int其中其值可以被表示。 131071100的值爲總是數學上正確;只有它的類型不同(因爲long int至少是32位,所以它總是爲intlong int)。

L後綴,它的類型爲long intlong long int;再次,價值永遠是正確的 - 並且恰巧131071100L總是類型long int

用一個不同數值類型的表達式初始化一些算術類型的對象是完全有效的。該值隱式地轉換爲爲目標類型。在這種情況下,由於目標類型爲long int,因此不存在溢出風險。

爲您的特定情況下,僅差異

long int numberOfPoints = 131071100; 

long int numberOfPoints = 131071100L; 

的是,後者是稍微明確之間 ;意思是完全一樣的。

L後綴仍然需要如果表達式是比單個恆定更加複雜。例如,如果你寫:

long int foo = 1024 * 1024 * 1024; 

然後每個恆定1024int型 - 等是整個表達式。如果int正好是剛剛16位,那麼乘法會溢出,即使數學結果將適合在long int。 (該類型的文字是根據其價值調整;大量表達的類型不是)爲了避免這個問題,你可以寫:

long int foo = 1024L * 1024L * 1024L;