gpt4 book ai didi

c - 有没有一种可移植的方法来定义 INT_MAX?

转载 作者:太空狗 更新时间:2023-10-29 17:00:56 36 4
gpt4 key购买 nike

我在/usr/include/limits.h 中找到了以下定义:

#define INT_MIN (-INT_MAX - 1)

#define INT_MAX 2147483647

此外,似乎此头文件中的所有 XXX_MAX 都是根据数值常量明确定义的。

我想知道是否有一种可移植的方式(针对跨平台的不同字长)来定义 INT_MAX ?

我尝试了以下方法:

~((int)-1)

但这似乎不正确。

简短的解释也很受重视。

最佳答案

对于标准头文件 limits.h 中的 INT_MAX,实现者的双手被束缚,因为它需要在预处理器中使用 #if 指令。这排除了任何涉及 sizeof 或强制转换的事情。

如果您只想要一个在实际 C 表达式中工作的版本,也许这会工作:

(int)-1U/2 == (int)(-1U/2) ? (int)-1U : (int)(-1U/2)

这里的概念是int可能和unsigned有相同数量的值位,或者少一个值位; C 标准允许。为了测试它是哪个,检查转换结果 (int)-1U。如果 -1U 适合 int,则其值必须在转换时保持不变,因此相等性将为真。如果 -1U 不适合 int,则转换会导致实现定义的 int 类型的结果。但是,无论值是什么,仅在可能值的范围内相等都是假的。

请注意,从技术上讲,转换为 int 可能会导致引发实现定义的信号,而不是获得实现定义的值,但是当您我们正在处理一个将在编译时求值的常量表达式。

关于c - 有没有一种可移植的方法来定义 INT_MAX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17800767/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com