[英]max value of integer
在 C 中,integer(用於 32 位機器)為 32 位,范圍從 -32,768 到 +32,767。 在 Java 中,整數(long)也是 32 位,但范圍從 -2,147,483,648 到 +2,147,483,647。
我不明白 Java 的范圍有何不同,即使位數相同。 有人可以解釋一下嗎?
在C 中,語言本身並不決定某些數據類型的表示。 它可以因機器而異,在嵌入式系統上, int
可以是 16 位寬,但通常是 32 位。
唯一的要求是short int
<= int
<= long int
按大小計算。 此外,建議int
應代表處理器的本機容量。
所有類型都有簽名。 unsigned
修飾符允許您使用最高位作為值的一部分(否則它是為符號位保留的)。
以下是可能的數據類型的可能值的簡短表格:
width minimum maximum
signed 8 bit -128 +127
signed 16 bit -32 768 +32 767
signed 32 bit -2 147 483 648 +2 147 483 647
signed 64 bit -9 223 372 036 854 775 808 +9 223 372 036 854 775 807
unsigned 8 bit 0 +255
unsigned 16 bit 0 +65 535
unsigned 32 bit 0 +4 294 967 295
unsigned 64 bit 0 +18 446 744 073 709 551 615
在Java 中, Java 語言規范確定了數據類型的表示。
順序是: byte
8位, short
16位, int
32位, long
64位。 所有這些類型都是簽名的,沒有未簽名的版本。 但是,位操作將數字視為無符號數(即正確處理所有位)。
字符數據類型char
是 16 位寬, unsigned ,並使用 UTF-16 編碼保存字符(但是,可以為char
分配一個代表無效字符代碼點的任意無符號 16 位整數)
width minimum maximum
SIGNED
byte: 8 bit -128 +127
short: 16 bit -32 768 +32 767
int: 32 bit -2 147 483 648 +2 147 483 647
long: 64 bit -9 223 372 036 854 775 808 +9 223 372 036 854 775 807
UNSIGNED
char 16 bit 0 +65 535
在 C 中,整數(對於 32 位機器)是 32 位,范圍從 -32768 到 +32767。
錯誤的。 2 的補碼表示中的 32 位有符號整數的范圍為 -2 31到 2 31 -1,等於 -2,147,483,648 到 2,147,483,647。
32 位整數的范圍從 -2,147,483,648 到 2,147,483,647。 然而,您在 32 位機器上的事實並不意味着您的C
編譯器使用 32 位整數。
C 語言定義指定了各種數據類型的最小范圍。 對於int
,此最小范圍是 -32767 到 32767,這意味着int
必須至少為16 位寬。 實現可以自由地提供具有相應更寬范圍的更寬的int
類型。 例如,在我工作的 SLES 10 開發服務器上,范圍是 -2147483647 到 2137483647。
仍然有一些系統使用 16 位int
類型(All The World Is Not A
VAX
x86),但有很多系統使用 32 位int
類型,可能還有一些使用 64 位。
C 語言旨在運行在不同的體系結構上。 Java 旨在運行在隱藏這些架構差異的虛擬機中。
java int
的嚴格等價物是 C 中的long int
。
編輯:如果定義了int32_t
,那么它在精度方面是等效的。 long int
保證 java int
的精度,因為它保證大小至少為 32 位。
海報混淆了他們的 java 類型。 在java中,他的C in是short:short (16 bit) = -32768 to 32767 int (32 bit) = -2,147,483,648 to 2,147,483,647
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
那是因為在 C - 32 位機器上的整數並不意味着 32 位用於存儲它,它也可能是 16 位。 這取決於機器(取決於實現)。
實際上int
、 short
、 long
位大小取決於編譯器的實現。
例如,在我的 Ubuntu 64 位上,我的32
位short
,而在另一個 32 位 Ubuntu 版本上,它是16
位。
在 C 中,__int32 的范圍是 –2147483648 到 2147483647。有關完整范圍,請參見此處。
unsigned short 0 to 65535
signed short –32768 to 32767
unsigned long 0 to 4294967295
signed long –2147483648 to 2147483647
不能保證“int”是 32 位,如果您想使用特定大小的變量,尤其是在編寫涉及位操作的代碼時,您應該使用“標准整數類型”。
在 Java 中
int 數據類型是一個 32 位有符號二進制補碼整數。 它的最小值為 -2,147,483,648,最大值為 2,147,483,647(含)。
它實際上很容易理解,你甚至可以用谷歌計算器來計算它:你有 32 位的 int 而計算機是二進制的,因此你可以有 2 個值/位(點)。 如果您計算 2^32,您將得到 4,294,967,296。 所以如果你把這個數字除以 2,(因為一半是負整數,另一半是正整數),那么你得到 2,147,483,648。 這個數字是可以用 32 位表示的最大整數,但如果你注意你會注意到 2,147,483,648 比 2,147,483,647 大 1,這是因為其中一個數字代表 0,不幸的是 2^ 32 不是奇數,因此中間不會只有一個數字,因此正整數的密碼少一個,而負整數則是完整的一半 2,147,483,648。
就是這樣。 這取決於機器而不是語言。
在標准 C 中,您可以使用 INT_MAX 作為最大 'int' 值,該常量必須在“limits.h”中定義。 為其他類型定義了類似的常量( http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html ),如上所述,這些常量與實現相關,但根據最小位具有最小值對於每種類型,如標准中所規定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.