如何在C语言中仅使用按位运算符来获取INT_MAX的值?我期望~01111111111(1的补码,所以是十进制-1),~0 >> 10111111111,这是最大值,但仍然是-1

为什么会这样?如何使用位操作获取INT_MAX的值?

最佳答案

尝试~0UL >> 1。问题是,如果C处理带符号的类型,它将执行带符号扩展的右移。这就是为什么您仍然会得到负数的原因-因为它会再移1位以匹配那里的1位。 (通过这种方式,-8 >> 1可以为您提供-4,以便快速除以二。)

关于c - 通过位操作获取INT_MAX,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9402386/

10-10 23:36