簡體   English   中英

integer 的最大值

[英]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 位。 這取決於機器(取決於實現)。

實際上intshortlong位大小取決於編譯器的實現。

例如,在我的 Ubuntu 64 位上,我的32short ,而在另一個 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.

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