什么决定了 C 中整数的大小
What determines the size of integer in C?
可能的重复项:
整数、长整型等
大小 int 的大小是否取决于编译器和/或处理器?
我不确定以前是否在SO上问过类似的问题(至少,我在搜索时找不到任何问题,所以想问自己)。
什么决定了C
中int
(和其他数据类型)的大小。我已经阅读它取决于机器/操作系统/编译器,但还没有遇到足够清晰/详细的解释,例如什么覆盖了另一个,等等。任何解释或指示都会非常有帮助。
最终编译器会这样做,但为了使编译的代码能够很好地与系统库配合使用,大多数编译器都与用于构建目标系统的编译器的行为相匹配。
所以松散地说,int
的大小是目标硬件和操作系统的属性(同一硬件上的两个不同操作系统可能具有不同的int
大小,并且在两台不同机器上运行的同一操作系统可能具有不同的int
大小;两者都有相当常见的例子)。
所有这些都受到C标准中规则的约束。 例如,int
必须足够大以表示-32767
和32767
之间的所有值。
>int
是平台的"自然"大小,实际上这意味着
-
处理器的寄存器大小,或
-
向后兼容现有代码库的大小(例如 Win64 中的 32 位
int
)。
编译器供应商可以自由选择具有≥ 16 个值位的任何大小,除了(对于桌面平台和更高)不适用于操作系统 API 的大小将意味着很少(如果有的话)编译器的副本被出售。
数据类型的大小受 C 标准的约束,通常约束最小大小。主机环境(目标计算机 + 操作系统)可能会施加进一步的限制,即对最大大小的限制。最后,编译器可以在这些最小值和最大值之间自由选择合适的值。
通常,对 C 数据类型的大小做出假设被认为是不好的做法。此外,没有必要,因为 C 会告诉你:
sizeof
运算符告诉您对象的大小(以字节为单位)- 来自 limits.h 的宏
CHAR_BITS
告诉您每字节的位数
因此,sizeof(foo) * CHAR_BITS
告诉您类型 foo
的大小,以位为单位,包括填充。
其他任何事情都只是假设。请注意,主机环境也可能由 10.000 名中国人组成,他们拿着袖珍计算器和一块巨大的黑板,凭空拉出尺寸限制。
SO 除了维基百科之外什么都不知道,几乎......
见Integer_(computer_science)
注(b)说:
"C/C++ 中 short 、int 和 long 的大小取决于语言的实现;根据数据模型,即使是短也可以是 16 位到 64 位的任何值。对于一些常见的平台:
在较旧的 16 位操作系统上,int 为 16 位,long 为 32 位。
在 32 位 Linux、DOS 和 Windows 上,int 和 long 是 32 位,而 long long 是 64 位。对于运行 32 位程序的 64 位处理器也是如此。
在64位Linux上,int是32位,而long和long long是64位。
- 努力将整数转换为链表。不知道我在这里做错了什么
- 如何检查是否定义了固定宽度的整数
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 如何计算整数链中使用了多少次数字?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 我在c++中遇到了一个奇怪的错误,其中一个计算2个小整数加法的语句溢出到一个长值中
- 如何找出在两个整数的乘积中设置了多少位(等于 1)
- 在C 中遇到了如何从用户输入直到输入的整数输入
- 标准的哪一部分决定了现场成员与初始化器列表的优先级
- 默认情况下,决定整数类型是唱歌或无符号的类型
- 是整数舍入规则决定了 C++、python3 和 python2.7 之间的 % 操作差异吗?
- 当没有时间源时,安卓源代码的哪一部分决定了最初的安卓时间
- 什么决定了 C 中整数的大小
- 在发出等待条件变量的信号后,线程何时获取锁?是什么决定了它
- 是什么决定了C++中的字符编码
- 什么决定了c++中Unicode字符串的规范化形式
- 是什么决定了c++程序中对象销毁的顺序
- 什么决定了文件被列出的顺序
- 什么决定了基本数据类型的大小
- 什么决定了boost::asio中TCP数据包的数量