在C中,整数(对于32位计算机)为32位,范围为-32,768至+32,767。在Java中,整数(long)也是32位,但范围为-2,147,483,648至+2,147,483,647。
即使位数相同,我也无法理解Java中的范围如何不同。有人可以解释吗?
在C中,整数(对于32位计算机)为32位,范围为-32,768至+32,767。在Java中,整数(long)也是32位,但范围为-2,147,483,648至+2,147,483,647。
即使位数相同,我也无法理解Java中的范围如何不同。有人可以解释吗?
Answers:
在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位宽,无符号,并使用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
int
...
int foo = Integer.MAX_VALUE + 1; System.out.println(Integer.toUnsignedLong(foo));
prints 2147483648
和char是一个无符号类型
Integer.MAX_VALUE + 1
为0x80000000
十六进制Integer.MIN_VALUE
。如果将其转换为无符号(长整数),则符号位将被视为值位,因此将被视为2147483648
。谢谢你的char
来信。char
是无符号的,您是对的,但是char并没有真正用于计算,这就是为什么我将其从列表中删除。
32位整数的范围是-2,147,483,648至2,147,483,647。但是,您在32位计算机上的事实并不意味着您的C
编译器使用32位整数。
int
是“机器的自然宽度”,当我为32位机器编译时,我会将其解释为32位。
C语言定义为各种数据类型指定了最小范围。对于int
,此最小范围是-32767至32767,这意味着an int
必须至少为 16位宽。一个实现可以免费提供更广泛的int
具有相应更广泛范围类型。例如,在我使用的SLES 10开发服务器上,范围是-2147483647至2137483647。
还有一些系统,在那里,使用16位的int
类型(所有的世界是不是一个VAX 86),但也有很多是使用32位的int
类型,也许几个是使用64位。
C语言旨在运行在不同的体系结构上。Java被设计为在隐藏这些架构差异的虚拟机中运行。
INT_MIN
指定为-32767
。不要假设二的补码。
发布者的Java类型混杂在一起。在Java中,他的C in是short:short(16位)= -32768至32767 int(32位)= -2,147,483,648至2,147,483,647
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
它实际上很容易理解,您甚至可以使用Google计算器对其进行计算:您具有32位整数,而计算机是二进制的,因此每位(点)可以有2个值。如果您计算2 ^ 32,则会得到4,294,967,296。因此,如果将此数字除以2(因为其中一半是负整数,另一半是正整数),则得到2147483648。该数字是可以用32位表示的最大整数,尽管如果您注意,您会注意到2,147,483,648大于2,147,483,647乘以1,这是因为其中一个数字表示0,不幸的是它位于中间2 ^ 32不是一个奇数,因此中间没有一个数字,因此正整数的密码要少一个,而负数则是完整的一半1,147,483,648。
就是这样。它取决于机器,而不取决于语言。
在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位,如果您要使用特定大小的变量,特别是在编写涉及位操作的代码时,则应使用'Standard Integer Types'。
在Java中
int数据类型是32位带符号的二进制补码整数。最小值为-2,147,483,648,最大值为2,147,483,647(含)。
在标准C中,可以将INT_MAX用作最大的“ int”值,此常数必须在“ limits.h”中定义。如上所述,为其他类型定义了类似的常量(http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html),这些常量与实现有关,但根据最小位数具有最小值按照标准中指定的每种类型。