我需要在我的程序中存儲2^63自然數。 Int有4個字節:http://www.cplusplus.com/doc/tutorial/variables/所以它是2 ^(8 * 4)= 2^32,我應該使用哪種類型?C++中哪種類型可以存儲2^63?
回答
您可以使用unsigned long long
,但我會檢查您的編譯器是否支持該類型。
#include <iostream>
int main()
{
std::cout<<sizeof(unsigned long long)<< " bytes" << std::endl;
return 0;
}
在我的機器上打印8 bytes
這是足夠的空間來存儲2^63。
在大多數現代處理器上,有long long int
。從技術上講,這對於C99/C++ 11是新的,但大多數C++編譯器自1999年以來一直支持它。
常量是表格0LL
我認爲後綴是不區分大小寫的。 – cdleonard
從來不知道。也改變了常數。積分也得到較小的數字。在win64上長 –
這取決於架構。對於保證的整數寬度,C++沒有C的stdint.h
頭。在64位Linux上long
將是64位。
我認爲C++ 11增加cstdint
作爲stdint.h
的包裝。那麼你可以使用int64_t
。
編輯:正如johannes所指出的,long
在Windows中是32位。我不確定這可以在C++ 03中輕鬆完成,同時仍然保持完全符合標準。 long long
和int64_t
不是C++ 03標準的一部分,但通過通用編譯器作爲編譯器擴展提供。
是32位。在Unix/Linux上它是64位的。編寫便攜式代碼時的一個煩惱之一。正如其他人長期提到的那樣,如果得到支持的話,還是要走的。 (C++ 11中的新增功能) – johannes
您的意思是'long long'。在Windows中,'long'在Windows中是32位。 –
更正。我應該停止對Windows的假設,因爲它似乎總是違揹我的期望。 –
可以使用GNU multiple precision arithmetic library
它有一個C++ Class Interface以及
注:
C++在GMP支持可以啓用
--enable-cxx', in which case a C++ compiler will be required. As a convenience
--enable-CXX =檢測' 只有在可以找到編譯器的情況下才能用於啓用C++支持。 C++支持由庫libgmpxx.la和頭文件gmpxx.h 組成(請參閱頭和庫)。
__int64
和long long
經常使用,但不是STL的一部分。 long long
for C將與GCC一起工作,如果__int64
不支持。 在C99中,如果您需要正好 64位可以使用int64_t
,從<stdint.h>
。
查看編譯器中limits.h
中定義的*_MAX
常量。如果它們中的任何一個> = 2^63,請使用與該常數對應的類型。對於我的編譯器,ULLONG_MAX
是0xffffffffffffffffi64
或18446744073709551615
,這是> = 9223372036854775808
(2^63)。所以我會使用unsigned long long
作爲類型來保存自然數達到2^63。
我不知道這是否有用,但double可以完全代表pow(2,63)的值(沒有錯誤)。然而,它不能完全代表pow(2,63)+ 1.0,也不能代表pow(2,63) - 1.0,所以這可能不是一個有用的答案。因此,如果實際上需要它的整數表示形式,則需要使用無符號的64位整數類型(帶符號的類型不夠,因爲(< < 63)是負值)。不幸的是,64位整數支持很普遍,但並不完全標準化。我相信「unsigned long long int」適用於所有當前版本的編譯器,但是你的里程可能會有所不同。我通過使用typedef爲「uint64」的配置頭來處理差異,然後根據當前編譯器對其進行不同的typedefs。一旦C++ 11得到更廣泛的實施,它將添加「unsigned int64_t」,這將是在此之後做到這一點的正確方法。
我建議使用一個大整數庫爲此。
這裏是一個公共領域的工程:https://mattmccutchen.net/bigint/
- 1. 哪種類型的表格存儲可以提供高性能?
- 2. 我可以在Redis中存儲這種類型的數據嗎?
- 3. C#/ WPF:我可以在剪貼板中存儲更多的1種類型嗎?
- 4. 哪種數據類型適合存儲這種情況?
- 5. 如何在C++中將各種類型存儲爲一種類型?
- 6. 數組或其他集合,我可以存儲多種類型
- 7. NSUserDefaults可以存儲多種不同的數據類型嗎?
- 8. 哪種類型的事件最好在DB中存儲日誌?
- 9. 整數類型可以在C++中存儲的值的範圍
- 10. 是否可以將C數據類型存儲在變量中?
- 11. 哪種數據類型可用於在SQL Server 2005中存儲視頻
- 12. 哪種類型的ArrayList用於存儲android中的可繪製變量
- 13. Azure Table中儲存,多種類型的
- 14. C# - 列表存儲可空類型
- 15. INT存儲VAR類型以及在c#
- 16. 可以存儲CLOB和NCLOB類型
- 17. 哪種集合類型可以在休眠映射中選擇
- 18. Swift2的switch語句中可以比較哪種類型的值
- 19. SQL Server 2000+哪種列類型用於存儲Blob?
- 20. 用哪種數據類型來存儲分數?
- 21. 哪種數據類型用於存儲較大的值?
- 22. 應該使用哪種PostgreSQL列類型來存儲Java BigDecimal?
- 23. 哪種數據類型用於存儲用戶數據?
- 24. 應使用哪種字段類型來存儲真/假值?
- 25. 使用哪種數據類型來存儲手機號碼
- 26. 什麼類型的數據可以類類型存儲?
- 27. 在C++數據結構中存儲多種數據類型
- 28. 最高值的數據類型可以存儲在c#
- 29. 數據類型可以存儲非常大的值C
- 30. 論哪種存儲器時如在Objective-C類變量
什麼平臺?簽名或未簽名?你可能有'long long'或'int64_t'。 –
http://stackoverflow.com/questions/269268/how-to-implement-big-int-in-c檢查這一點。 – onatm
不,你不知道。如果是這樣告訴我爲什麼? –