我需要一种方法来仅使用运算符来查找32位整数(最高有效位)中的符号位! 〜& ^ | +。我只允许使用高达0xFF的常量,但可以构造更大的数字。它必须是内联代码,没有循环或条件
是的,这是一个任务,但这不是整个问题,它只是我需要检查的一个小案例。
我知道我可以通过执行x>> 31来获取符号,这可以使用除法来完成,但这只会导致需要更多的位移,我无法使用:(
操作员越少越好,因为我只允许10个完成整个问题,这只是一个小问题。
问题在于检查数字x是否等于0x7FFFFFFF。我的代码现在读取的方式是[(是x neg?)& (是x + 1负)]。如果x等于0x7FFFFFFF,则加1将使溢出溢出,导致x变为负数。但是这个逻辑只有在x不是负面的情况下才有效。因此第一部分。
请帮助我???答案 0 :(得分:5)
测试符号位很困难;对于整个问题,我认为你正在寻找符合
的内容!((~x) ^ (x + 1))
此测试~x
和x + 1
按位相同,即数字相同。
答案 1 :(得分:0)
#include <limits.h>
negative = !!(INT_MIN & number);