如何在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/