C 中的 Integer 变量是占用 2 个字节还是 4 个字节?它所依赖的因素是什么?
大部分教材都说整型变量占用2个字节。但是当我运行一个程序,打印一个整数数组的连续地址时,它显示了4的差异。
没有具体的答案。这取决于平台。它是实现定义的。它可以是2、4或其他东西。
intint
背后的想法是,它应该与给定平台上的自然“单词”大小相匹配:16位平台上的16位,32位平台上32位,64位平台上64位,你就知道了。然而,出于向后兼容的目的,有些编译器甚至在64位平台上也倾向于坚持使用32位int
。
2字节int
的时间早已一去不复返了(16位平台?),除非您使用一些具有16位字大小的嵌入式平台。你的教科书可能已经很旧了。
这是C语言中一开始可能令人困惑的地方,但C标准只为保证支持的整数类型指定了最小范围int
保证能够保存-32767到32767,这需要16位。在这种情况下,int
是2个字节。然而,实现可以自由地超出这个最小值,因为您将看到许多现代编译器将int
32位(这也意味着4字节非常普遍)。
你的书上写2字节的原因很可能是因为它太旧了。曾经,这是常态。通常,如果需要了解它在您使用的平台上的字节数,则应始终使用sizeof
运算符。
为了解决这个问题,C99添加了新的类型,您可以在其中显式地请求特定大小的整数,例如int16_t
或int32_t
。在此之前,没有通用的方法来获得特定宽度的整数(尽管大多数平台都提供了基于每个平台的类似类型)。
我知道它等于sizeof(int)
。int
的大小实际上取决于编译器。在当时,当处理器是16位时,int
是2字节。现在,它在32位和64位系统上通常是4字节。
不过,使用< code>sizeof(int)是获取执行程序的特定系统的整数大小的最佳方式。
EDIT:修复了在大多数64位系统上int
为8字节的错误语句。例如,它是64位GCC上的4个字节。
我有一张结构如下的桌子 计算的1行大小为36字节:4x5+2x8。每个INT字段4字节,每个DATETIME字段8字节。 但是,当我在这个表中插入5 000 000行时,.idb表文件的实际大小是268 MB。因此,一行使用了大约56个字节:268 MB/5 000 000~56.2036 知道为什么会这样吗?INT实际上使用8个字节而不是4(8x5+2x8=56)吗?我在文件中找不到任何提到这种
问题内容: 我以前是byte从文本文件中读取的。 为什么我看到一个完整的字符被读取? 问题答案: A 表示Java 中的字符。它长2个字节(至少这是有效值范围所建议的大小)。 这并不一定意味着一个字符的每个表示都长2个字节。实际上,许多编码只为每个字符保留1个字节(或为最常见的字符使用1个字节)。 当调用构造函数你问的Java的转换至使用平台的默认编码。由于平台默认编码通常是1字节编码(例如ISO
使用sizeof()打印变量的大小 为什么sizeof()返回int的大小,而不是短int,即2个字节?
注意:有关选项的更多用途,请参见java-启动JVM时的Xms和Xmx参数是什么?。
问题内容: 在CSS中设置字体大小时,我应该使用百分比值()还是?您能解释一下优势吗? 问题答案: 他们的结论是: 显示的大小和以ems为单位的行高以及在正文中指定的百分比(以及Safari 2的可选警告)可在当今所有常用的浏览器中提供准确,可调整大小的文本。您可以将这种技术放入工具包中,并将其用作在CSS中调整文本大小的最佳方法,该方法可以使设计人员和读者满意。
问题内容: 许多书籍和教程都说,哈希表的大小必须是素数,才能在所有存储桶中平均分配密钥。但是Java 总是使用大小为2的幂。它不应该使用素数吗?哈希表的大小最好是“素数”还是“ 2的幂”? 问题答案: 使用2的幂可以有效地屏蔽哈希码的最高位。因此,在这种情况下,劣质哈希函数的性能可能会特别差。 Java 通过不信任对象的实现并对结果进行第二级哈希处理来缓解这种情况: 将补充哈希函数应用于给定的ha