簡體   English   中英

在 C++ 中存儲和打印 10+ 位整數

[英]Storing and printing 10+ digit integer in c++

我正在使用 cout 將數字打印到控制台。 我還將高達 13+0 億的值存儲為一個數字並對其進行計算。 我應該使用什么數據類型?

當我執行以下操作時:

int a = 6800000000;
cout << a;

它打印 -1789934592。

謝謝。

long long最多可以容納 9223372036854775807。如果需要更大的,請使用gmp東西。

使用int64_t來保證你不會溢出。 它可以從stdint.h 獲得

請注意, int64_tlong long都包含在 C99 和 C++ 0x 中,但不在當前版本的 C++ 中。 因此,使用任何一種都會使您的代碼面臨不可移植的風險。 然而,實際上,這種風險可能已經很低了——以至於當/如果您移植代碼時,可能會出現更大的問題。

但是,如果您真的想確保避免這種可能性,您可以考慮使用雙精度浮點數。 與流行的看法相反,浮點類型可以精確地表示達到某個限制的整數——該限制(本質上)由 FP 類型中尾數的大小設置。 double 的典型實現具有 53 位尾數,因此您可以以絕對精度表示 53 位整數。 支持數字高達9,007,199,254,740,992(其基本超過任一的“十億”的流行含義13)。

您的數據類型 (int) 太小,無法容納如此大的數字。 您應該使用更大的數據類型或另一個答案中給出的固定大小數據類型之一(盡管如果您不使用負數,您應該真正使用 uint64_t )。

了解不同大小類型的范圍限制是個好主意。

32 位類型(在大多數 32 位平台上,int 和 long 都是 32 位)具有以下范圍:

signed: -2,147,483,648 to 2,147,483,647
unsigned: 0 to 4,294,967,295

雖然 64 位類型(通常 long long 是 64 位,在大多數 Unix 64 位平台上 long 也是 64)具有以下范圍:

signed: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned: 0 to 18,446,744,073,709,551,615

只需在聲明語句中使用 double

無符號長長

可以使用

你可以使用一個長整數:

long int a

或者,如果它總是為正數,則為 unsigned long int:

unsigned long int a

見: http : //forums.guru3d.com/showthread.php?t=131678

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM