我已经阅读了为什么sizeof(long long)
在大多数系统上是8的问题,但我仍然不确定如何解释它们的含义。
给出的原因之一是有很多"外面"代码假设sizeof(long long) <= sizeof(size_t)
。这就说得通了。然后,对建筑惯例和品牌等有各种各样的看法。我什至不想参与有关《公约历史》的辩论。鉴于long long
可以按照标准为任何尺寸,但我认为这并不是我真正关心的原因。
我想知道的是如何在sizeof(long long)
返回8的事实之间解释差异现在,但long long
实际上是16。应该将其解释为仅适用于sizeof
运算符,或者是否存在与该事实相关的基础地址指针,因此long long
上的操作以8个字节增量执行?
sizeof(签名)长v4:8(x,2147483647)V4的值:7fffffff
尺寸长长V5:8(x,9223372036854775807)V5的值:7fffffffffffffffffff
根据标准,long long
至少为64位,或说8个字节。
在当今大多数机器上,它长8个字节。sizeof
(顺便说一句,运算符,不是功能)返回其大小,您可以指望它。sizeof(long long)
不可能是8
,而long long
的大小为16
。
最长的标准数据类型是大多数系统上的8个字节(64位),即long long
。
此外,您可以包括 limits.h
哪个库包含每个数据类型的定义值及其在系统上所占用的空间。
在我对long
遇到的一定程度的兴趣期间,一个细微的更新。保证它至少长32位(或4个字节)。因此,如long int
(尽管在这种情况下,long
是一个长度修改器)。
在某个地方有混乱,我不确定它在哪里,因为您不说从哪里获得数字,所以我会尝试澄清基础知识。
sizeof
按定义返回类型的字节数量。在所有现代系统上,一个字节均由8位组成,但是在某些深奥或旧体系结构上,字节具有其他数量的位。limits.h
的CHAR_BIT
告诉您字节中有多少位。但是同样,在所有现代体系结构中,是8个。
sizeof(long)返回8,但长长实际上是16。
那是不正确的。如果sizoef(long long)
为8,则long long
为8个字节。
后续问题是为什么sizeof(long)返回8,但只有4个字节。
再次,不是真的。如果sizeof (long)
是8
,则long
保持8个字节。
事实证明,我们是否应该预期消除4 Byte长期。
不是地狱的机会。C和C 的支柱之一是向后兼容。删除基本类型几乎会破坏地球上的每个程序。
如果您询问当int
和long long
似乎涵盖所有内容时是否使用long
类型,则答案是int
,long long
不涵盖所有内容。有类似的系统arduino其中 sizeof int == 2
, sizeof long == 4
和 sizeof long long == 8
。
问题是系统的一部分已切换到64位,并且系统的一部分仍为32位。