2016-11-15 33 views
-2

我不明白printf函數lll長度說明的區別:爲什麼「L」和「LL」修飾符做同樣的printf(C)

printf("%ld \n", 9999999991474836499); 
printf("%lld \n", 9999999991474836499); 

兩個printf的使同樣的輸出,因爲該類型的溢出:

-8446744082234715117                                                    
-8446744082234715117 

所以,當我刪除一個數字我做的:

printf("%ld \n", 999999999147483649); 
printf("%lld \n", 999999999147483649); 

我得到相同的輸出:

999999999147483649                                                     
999999999147483649 

沒有溢出。

我不明白l意思是long intll那麼平均long long int爲什麼他們沒有什麼區別?

+1

是什麼'長int'和'長的長整型之間的區別'在你的平臺上? –

+0

我使用這個在線編譯器來執行我的測試:https://www.tutorialspoint.com/compile_c_online.php – Sadek

+1

對你的程序有幫助的補充是:'printf(「%zu%zu \ n」,sizeof( long),sizeof(long long));'如果它們是相同的,那就是爲什麼輸出是原樣的。 – eddiem

回答

3

在某些計算機上,longlong long具有相同的表示,所以lll做同樣的事情。對於除Windows以外的大多數64位平臺都是如此。 (這是解釋爲什麼它以這種方式工作,而不是承諾它必須以這種方式工作。)

在其他平臺-64位Windows上,32位任何東西,你都不會那麼幸運。

程序錯誤的方式之一,它只是發生偶然工作,並不能保證它將繼續工作,即使在同一個平臺上。

1

「%ld」不保證處理64位整數。 「%lld」是。

在C庫中的許多實現,沒有什麼區別,但有些平臺可能不與%ld的打印大64位數字