如何在 C 语言中仅使用按位运算符获取 INT_MAX
的值?我希望 ~0
为 1111111111
(1
的补码,所以十进制 -1
)和 ~ 0 >> 1
为 0111111111
,这将是最大值,但它仍然是 -1
。
为什么会这样,如何使用位运算获取 INT_MAX
的值?
最佳答案
尝试 ~0UL >> 1
。问题是,如果 C 正在处理带符号的类型,它将进行符号扩展右移。这就是为什么你仍然得到负数的原因——因为它正在移动另一个 1 位以匹配那里的 1 位。 (这样 -8
>> 1 就可以得到 -4
,因为您希望快速除以二。)
关于c - 通过位操作获取 INT_MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9402386/