我知道這個問題已經被問了很多,但我從來沒有見過一個適合我需要的適當答案。我正在編寫一個編譯器和解釋器,以便在C++中獲得樂趣,並且爲了編寫它們,我需要確保我使用的類型是8位,32位,64位等等......我發現了,但是我已被警告說它可能不適用於所有平臺。我也聽說有些平臺不支持這些大小的整數,但它必須是可能的,因爲java設法實現這一點。不幸的是,Java源代碼不可用。使用精確大小的整數C++
回答
爲什麼你需要確保你使用的類型正好是32 位等。在編譯器或解釋器中這當然是不必要的。 (您可能需要int_least32_t
,這取決於但 通常情況下,你需要使用int
無處不在,讓編譯器 將工作無處不在---儘管有些項目可能是因爲它太大 一個16位的機器上。)
至於便攜性:如果你是爲了好玩而做的,唯一需要擔心的 平臺是PC。但即使你想要 擴展到普通的Unix平臺,你也會發現 類似int32_t
也可以在那裏使用。關於唯一的 的地方,你不會找到他們是在一些異國情調的大型機和一些嵌入式系統 。 (這兩者都不會被Java支持, )
的<stdint.h>
(<cstdint>
上C++)標頭包含typedef
s表示服從特定尺寸:
int8_t x;
int16_t y;
int32_t z;
如果typedef的不存在,則該平臺不支持它。要檢查它,您有一些可用的宏,如INT16_MIN
INT16_MAX
,它定義了指定整數的最小值和最大值,以便您可以親自看到它。
這些類型是可選的,如果實現不能提供它們,則不需要在那裏。 – PlasmaHH
太棒了,但請不要鏈接到該網站。 –
@LightnessRacesinOrbit cplusplus.com有什麼問題? –
準確的尺寸類型是由C99標準定義的,在stdint.h
頭文件中(看看here)。您只需要一個兼容C99的編譯器,如現代GCC和Clang。在C++中,改用cstdint
。
此外,在OpenJDK源代碼是公開發布,你可以下載或提供on the project page和研究它的鏈接瀏覽它。
編輯:有少數平臺(異國情調,嵌入式或非常非常古老),不宣佈或支持這些類型。在這些方面,不可能獲得確切的大小類型,但如果不是現在使用的家庭/企業處理器,您仍然可以定位大部分,而不必擔心。
請在C++中使用'cstdint'。 –
是的,絕對正確。添加到答案中。 –
這並沒有解決他的問題:當確切的尺寸類型不可用時該怎麼做。他們不支持每個平臺。 –
由於C++ 11已經發布,所以有Fixed width integer types可以讓你的類型至少有你想要的大小。
但如果字體大小發生變化,那麼在一個系統上編譯的文件將與另一個系統編譯時不兼容 – Popgalop
@Popgalop在一個系統上編譯的文件通常與另一個系統上編譯的文件不兼容。與尺寸無關。 –
固定寬度的整數類型不保證存在。 (OP顯然知道'
- 1. 用整數算術精確反映大數和的大小
- 2. WP7 C#XNA調整大小精靈
- 3. 失去大整數的精確度(pow?)
- 4. 小數精確
- 5. 如何在c#中使用精確大小打印矩形?
- 6. 使用mgo精確計算小數點
- 7. matplotlib中的精確子圖大小
- 8. 如何設置QPushButton的精確大小?
- 9. 調整大小TIFF圖像使用C#
- 10. 將圖像調整爲精確文件大小
- 11. 使用函數在C中動態調整大小的數組
- 12. 調整小數精度,.NET
- 13. 如何使用Python'struct'模塊獲取精確的結構大小
- 14. grep精確整數匹配
- 15. 調整大小和定位SharpDX精靈
- 16. 處理雙精度除了使用小數而不精確
- 17. 精度除以大整數
- 18. 調整字符數組的大小c
- 19. 調整數組的大小(c)
- 20. 如何調整數組的大小C++
- 21. C# - 調整參考大小的鋸齒狀數組的大小
- 22. C#的DataTable小數精度
- 23. 整數的大小?
- 24. 精確到浮點小數?
- 25. c#XNA 4.0相機縮放和精靈大小調整
- 26. C中的精確數字?
- 27. 帶列調整大小插件的數據表不能正確調整大小
- 28. 如何精確求解大整數係數(整數)的二次方程?
- 29. 如何在Python中使用大整數除法得到正確的精度
- 30. 使用jQuery調整大小後調整大小後的寬度
Java編譯代碼不適用於「所有平臺」。它適用於獨立於計算機體系結構的JVM平臺。所以,這並不是說「java能夠實現這個目標」,但它甚至不嘗試這樣做。 – SJuan76
但java在所有主要平臺上都可用,並且其類型始終是相同的大小。 – Popgalop
但是在內部,JVM可能在一個平臺上使用int64作爲「java integer」,而在另一個平臺上使用int32。 – SJuan76