3 回答

TA貢獻1804條經驗 獲得超7個贊
C 中數據類型的大小是特定于實現的。對于16位機器,int是2字節,對于32位機器,它是4字節,對于64位機器,它是4或8字節。(Windows 10 上的 Visual Studios 2019 產生 4 個字節,而 Linux 計算機上的 FCC 產生 8 個字節。)
要檢查 int 大小,請使用“sizeof(int)”。
C 編譯器還可以定義 int16_t、int32_t、int64_t,以及 int16、int32 和 int64,只是為了讓事情變得有趣。當你將近半個世紀的歷史強加到一種語言上時,就會發生這種情況。這就是為什么 sizeof 如此重要,因為對大小進行硬編碼可能適用于一種編譯器,但可能不適用于另一種編譯器。

TA貢獻1877條經驗 獲得超6個贊
C 指定最小類型大小,并且不同實現之間使用的實際大小存在差異。另一方面,Java 指定了精確的類型大小,因此實現之間沒有差異。
有些程序員總是喜歡指定每種類型的確切大小。如果您這樣做,您可能會更喜歡 Java?;蛘?,在 C 中,您可以包含標頭<inttypes.h>
并使用 C 的精確大小類型,例如int16_t
和int32_t
。
但在回答你的問題“為什么 Java 中的類型是兩倍大?”時,這是無法回答的,因為問題的前提是有缺陷的。你說,“例如,在 C 中,int 是 2 個字節”,但事實并非如此。最小保證大小為 2 個字節,但在當今最流行的機器上為 4 個字節。

TA貢獻1808條經驗 獲得超4個贊
C 和 Java 對于可移植性有不同的方法。
由于編譯后的 C 代碼(通常)在本機運行,因此 C 規范避免強制指定特定大小,因為這會因不同機器而異。相反,它指定每種類型必須能夠表示的最小值范圍。An必須至少int
能夠表示range ,這意味著它必須至少有16 位寬,但也可以更寬。在現代桌面平臺上,它通常是 32 位寬。[-32767..32767]
編譯后的 Java 代碼 OTOH(通常)在虛擬機(基本上是機器級解釋器)中運行,并且指定 VM,以便類型始終具有固定大小。VM 負責將 Java 類型映射到本機計算機,因此在 16 位平臺上運行的 VM 可能需要做一些有趣的操作來表示 32 位int
.
添加回答
舉報