例如,Java中的实数需要8个字节,而C ++中只需4个字节。类似地,对于字符,Java占用2个字节,但C ++只占用1个字节。为什么它们的大小不同?
答案 0 :(得分:8)
你说的不是真的。 C和C ++没有任何固定大小的类型(除stdint.h
中指定的类型外)。
如果你没有从那个陈述中得到回答,这里有一个明确的答案:
“有区别,因为Java包含固定大小的数据类型,而C和C ++中的所有基本数据类型都依赖于编译程序的实际平台(机器架构+操作系统)。”
答案 1 :(得分:3)
首先,虽然C ++中实际的类型大小是依赖于实现的
(并且存在char
具有9位的实现)
支持这两种语言的平台float
和double
都有
C ++和Java中的大小完全相同。
对于char
,Java类型char
或多或少对应
C ++中的wchar_t
;从逻辑上讲,它在大多数平台上应该是4个字节,但是
由于各种历史原因,它在Windows,AIX和Linux上只有2个字节
在Java运行时环境中。
Java与C ++ char
类型没有实际等价。
答案 2 :(得分:1)
c ++依赖于平台。例如 - int将是字的大小 - 32位或64位,取决于您的计算机的新程度。
java更通用 - 它运行在一个定义大小的JVM上。与C#相同的情况。两者都不依赖于你拥有的操作系统和CPU。
答案 3 :(得分:1)
C ++类型的大小是而不是一成不变的。标准说(3.9.1 基本类型):
声明为字符(char)的对象应足够大以存储 实现的基本字符集中的任何成员。
之后:
有五种标准的有符号整数类型:“signed char”,“short” int“,”int“,”long int“和”long“ long int“。在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间。
< ...>
有三种浮点类型:float,double和long double。 double类型提供至少与float一样多的精度 类型long double提供至少与double相同的精度。
如您所见,没有提到确切的值。
答案 4 :(得分:1)
C和C ++没有为许多类型定义大小,但通常float
是4字节,就像在Java中一样,double
是8字节,就像在Java中一样。 C没有标准字节类型。
char
是一个字节,但不保证是有符号或无符号的。在Java中,它是2个字节,并保证签名以支持0到65535之间的字符。
这里的区别在于C被设计为你需要支持的7位ASCII。 Java是在16位字符看起来足够时设计的。具有讽刺意味的是,Unicode不会超过65535,因此Java现在支持使用多个char
s
答案 5 :(得分:0)
只是所设计的语言选择使用不同的默认表示。没有比这更复杂的了。
例如,Java中char
的大小是由于希望使用16位unicode字符(需要2个字节)。这是一个平衡了许多权衡的设计决策:
请注意,Java中可以有一个4字节的浮点数 - 它叫float
而不是double
(8字节)
答案 6 :(得分:0)