2011-12-24 45 views
5

我有點困惑C在多長時間工作。如何在C中使用Long數據類型?

如果我要求在Java中的long值的最大值,我會得到一個數字在quintillions中。如果我用C簽名或未簽名的話,它的數量是十億。

Java是建立在C ...所以差異來自哪裏?

我也試着用long long值,unsigned/signed long值和long int值來表示文字。他們似乎都沒有處理過數十億的數字。爲什麼?我犯了一個錯誤嗎?

+1

http://en.wikipedia.org/wiki/Integer_(computer_science) – 2011-12-24 04:29:54

回答

10

C標準將long定義爲至少與int一樣大。實際大小取決於實現。 Java的情況並非如此,其中long需要64位長。

C99標準定義了固定大小的整數類型,如stdint.h中定義的int64_t,您可以在所有平臺上使用固定大小的整數。

+0

只是添加註釋:它通常取決於您的操作系統的位,但當然不一定如此。 – Dimme 2011-12-24 04:29:47

+0

我可以在標準C庫中使用64位長的文件嗎? – bgroenks 2011-12-24 04:40:56

+1

@ ghostsoldier23對於採用64位值的庫,您可以使用64個long,通常需要將您的程序編譯爲64位例如當size_t是64位時。 – 2011-12-24 07:56:46

2

C也有long long類型。那個保證至少是64位。

+0

C99定義'long long int'爲最少能夠保存64位有符號整數並且大於'long int'的大小。它不一定是64位。 – 2011-12-24 13:55:52

+0

@MehrdadAfshari,對,我不夠精確,謝謝,改變。 – 2011-12-24 13:59:23

+0

@Mehrdad:你實際上說過,long long int的大小必須嚴格大於long int的大小。那是對的嗎?當然,一致性實現可以提供'long long int'與'long int'相同的大小; long long int的大小不能小於long int的大小。 – 2011-12-24 22:08:17

0

如果你想用更大的數字,您可以在這裏使用GNU MP Bignum的圖書館工作: http://gmplib.org/ 的數量和精度僅由運行在機器的可用內存的限制。

相關問題