【发布时间】:2021-10-19 13:12:14
【问题描述】:
如果sizeof(int) == sizeof(long),那么INT_MIN == LONG_MIN && INT_MAX == LONG_MAX 是否总是正确的?
是否有任何真实存在的案例证明“不真实”?
UPD。类似问题:Is there any hosted C implementations which have CHAR_BIT > 8?.
【问题讨论】:
-
可以想象一台计算机和一个疯狂的编译器编写器,它使用 2 的补码作为整数,使用符号大小作为长整数。但没有真实世界的例子。
-
只是好奇,你为什么想知道你是否可以依赖它?
-
@stark 显然,在下一版本的 C 标准中,有符号整数的补码和符号和大小表示将被放弃。
-
The New C Standard 在第 594 页上说有 Cray 实现,其中
short是占用 64 位空间的 32 位类型。在这种情况下,它可能有sizeof(short) == sizeof(int)但SHORT_MAX < INT_MAX。 -
我认为这是对任何托管实现的安全假设,但这不是保证。 C 允许实现用类型大小和表示来做奇怪的事情,并且总是有一些奇怪的、利基架构必须以不同的方式做事。
标签: c integer range sizeof c11