检查32位的符号位而不使用<<或>>

And*_*rew 3 c sign bit

我需要一种方法来仅使用运算符来找到32位整数(最高位)中的符号位!〜&^ | +.我只允许使用高达0xFF的常量,但可以构造更大的数字.它必须是内联代码,没有循环或条件

是的,这是一个任务,但这不是整个问题,它只是我需要检查的一个小案例.

我知道我可以通过x >> 31获得标志,这可以使用除法来完成,但这只会导致需要更多的位移,我不能使用:(

操作员越少越好,因为我只允许10个完成整个问题,这只是一个小问题.

这个问题是检查数字x是否等于0x7FFFFFFF.我的代码现在读取的方式是[(是x neg?)&(是x + 1负)].如果x等于0x7FFFFFFF,则加1将使溢出溢出,导致x变为负数.但是这个逻辑只有在x不是负面的情况下才有效.因此第一部分.

请帮帮我???

eca*_*mur 5

测试符号位很困难; 对于整个问题,我认为你正在寻找类似的东西

!((~x) ^ (x + 1))
Run Code Online (Sandbox Code Playgroud)

这测试~x并且x + 1是按位相同的,即相同的数字.