3 回答
TA贡献1804条经验 获得超7个赞
C 中数据类型的大小是特定于实现的。对于16位机器,int是2字节,对于32位机器,它是4字节,对于64位机器,它是4或8字节。(Windows 10 上的 Visual Studios 2019 产生 4 个字节,而 Linux 计算机上的 FCC 产生 8 个字节。)
要检查 int 大小,请使用“sizeof(int)”。
C 编译器还可以定义 int16_t、int32_t、int64_t,以及 int16、int32 和 int64,只是为了让事情变得有趣。当你将近半个世纪的历史强加到一种语言上时,就会发生这种情况。这就是为什么 sizeof 如此重要,因为对大小进行硬编码可能适用于一种编译器,但可能不适用于另一种编译器。
TA贡献1877条经验 获得超6个赞
C 指定最小类型大小,并且不同实现之间使用的实际大小存在差异。另一方面,Java 指定了精确的类型大小,因此实现之间没有差异。
有些程序员总是喜欢指定每种类型的确切大小。如果您这样做,您可能会更喜欢 Java。或者,在 C 中,您可以包含标头<inttypes.h>
并使用 C 的精确大小类型,例如int16_t
和int32_t
。
但在回答你的问题“为什么 Java 中的类型是两倍大?”时,这是无法回答的,因为问题的前提是有缺陷的。你说,“例如,在 C 中,int 是 2 个字节”,但事实并非如此。最小保证大小为 2 个字节,但在当今最流行的机器上为 4 个字节。
TA贡献1808条经验 获得超4个赞
C 和 Java 对于可移植性有不同的方法。
由于编译后的 C 代码(通常)在本机运行,因此 C 规范避免强制指定特定大小,因为这会因不同机器而异。相反,它指定每种类型必须能够表示的最小值范围。An必须至少int
能够表示range ,这意味着它必须至少有16 位宽,但也可以更宽。在现代桌面平台上,它通常是 32 位宽。[-32767..32767]
编译后的 Java 代码 OTOH(通常)在虚拟机(基本上是机器级解释器)中运行,并且指定 VM,以便类型始终具有固定大小。VM 负责将 Java 类型映射到本机计算机,因此在 16 位平台上运行的 VM 可能需要做一些有趣的操作来表示 32 位int
.
添加回答
举报