繁体   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