为什么我发现int和long int的大小显示为4个字节?是int默认是long int吗?
答案 0 :(得分:9)
sizeof(short) <= sizeof(int) <= sizeof(long)
这就是你所能依靠的。其余的完全取决于实施。在DOS的旧时代,16位编译器通常有sizeof(int)== sizeof(short)== 2.在32位系统上,sizeof(int)通常等于sizeof(long)== 4.通常拇指,int
是处理器可以用最快的速度工作的类型。没有例外的规则......
编辑:删除了第二条规则sizeof(short) < sizeof(long)
,它不属于C标准。在某些平台上,sizeof(short)
实际上可能等于sizeof(long)
。
答案 1 :(得分:7)
int
的大小既不保证为4
,也不等于long int
的大小。换句话说:那是完全实现的定义。
答案 2 :(得分:4)
他们碰巧有相同的尺寸。
This post总结了数据类型在大小和范围方面的预期结果。
答案 3 :(得分:2)
不,int
和long
的大小不一定相同,即使编译器中的情况恰好如此。
C标准为每种数据类型定义了最小大小,但实际大小取决于实现。例如,某些系统具有2字节int
和4字节long
s,而其他系统可能具有4字节int
和8字节long
s。
答案 4 :(得分:2)
标准授权的唯一保证(假设下面的所有表达式都是sizeof (type)
而不仅仅是type
)
char <= short <= int <= long <= long long
所以你可以拥有
char == short == int == long == long long /* Cray?? */
char < short < int == long < long long /* Windows 32 bit */
char < short < int < long == long long /* Linux 64 bit */
答案 5 :(得分:0)
标准的唯一保证是sizeof(long)&gt; = sizeof(int)。
在16位处理器的旧时代,int为2字节的情况并不少见。
答案 6 :(得分:0)
C标准对标准整数类型的转换等级及其精度做出以下保证:
_Bool (1) < char (8)
<= short (16)
<= int (16)
<= long (32)
<= long long (64)
如果是_Bool
,精度是准确的,而其他是最小值。可能还有其他所谓的扩展整数类型。
char
是内存的最小可寻址单位,所以sizeof (char) == 1
,无论其精度如何(由CHAR_BIT
给出)。其他标准整数类型的大小是imlementation-defined。我怀疑sizeof (_Bool)
也会1
,但我在标准中找不到任何可以保证这一点的内容......
答案 7 :(得分:0)
在现代32位操作系统上,int和long通常是32位,或ILP32(整数,长,指针),而在64位操作系统上,LP64很常见,暗示int是32位。长的是64位几乎到处都是,可能也可能不长。
如果你的环境使用那组类型,通常会有你可以测试的宏,比如ILP32, ILP32 等。