C和Java中数据类型的大小?

C和Java中数据类型的大小?,java,c,Java,C,数据类型的大小在C中是2字节,而在Java中是4字节,对于其他数据类型也是如此。为什么Java中的数据类型的大小是原来的两倍?C中的数据类型的大小是特定于实现的。对于16位机器,int为2字节,对于32位机器,int为4字节,对于64位机器,int为4或8字节。(Windows 10上的Visual Studio 2019产生4个字节,而我的Linux机器上的FCC产生8个字节。) 要检查您的整数大小,请使用“sizeof(int)” C编译器还可以定义int16、int32、int64以及in

数据类型的大小在C中是2字节,而在Java中是4字节,对于其他数据类型也是如此。为什么Java中的数据类型的大小是原来的两倍?

C中的数据类型的大小是特定于实现的。对于16位机器,int为2字节,对于32位机器,int为4字节,对于64位机器,int为4或8字节。(Windows 10上的Visual Studio 2019产生4个字节,而我的Linux机器上的FCC产生8个字节。)

要检查您的整数大小,请使用“sizeof(int)”


C编译器还可以定义int16、int32、int64以及int16、int32和int64,只是为了让事情变得有趣。这是当一门语言有将近半个世纪的历史时所发生的事情。这就是sizeof如此重要的原因,因为硬编码一个大小可以在一个编译器中使用,但在另一个编译器中可能无法使用

C指定了最小的类型大小,并且它们使用的实际大小在实现之间存在差异。另一方面,Java指定了确切的类型大小,因此实现之间没有差异

一些程序员总是喜欢指定每种类型的确切大小。如果您这样做,您可能会更喜欢Java。或者,在C中,您可以包含标题
,并使用C的精确大小类型,如
int16\u t
int32\u t


但在回答您的问题“为什么Java中的类型是两倍大?”时,这是无法回答的,因为这个问题的前提是有缺陷的。你说,“例如,在C中,int是2字节”,但那不是真的。最小保证大小是2字节,但在当今最流行的机器上是4字节。

C和Java在可移植性方面有不同的方法

由于编译后的C代码(通常)以本机方式运行,因此C规范避免强制指定特定的大小,因为不同的机器会有所不同。相反,它指定了每个类型必须能够表示的最小值范围。
int
必须至少能够表示范围
[-32767..32767]
,这意味着它必须至少有16位宽,但可能更宽。在现代桌面平台上,它通常是32位宽


编译的Java代码OTOH(通常)在虚拟机(基本上是一个机器级解释器)中运行,并且VM的指定使得类型始终具有固定的大小。VM负责将Java类型映射到本机机器上,因此在16位平台上运行的VM可能需要做一些有趣的练习来表示32位
int

“C中的数据类型的大小,例如,int是2字节”-不,它是特定于实现的。这取决于我使用的C(Ubuntu上的Linux gcc)int是4字节,“16位机器”、“32位机器”等等都不是合适的术语。计算机处理器是具有许多特性的复杂设备,包括寄存器宽度、总线宽度、地址空间大小等。这些可能具有混合值,例如具有22位地址空间的16位寄存器,在这种情况下,机器不是明显的16位、32位或64位。
int
的宽度是架构建议的“自然”大小,但它和其他整数类型的宽度是由C实现决定的,而不是由机器决定的。