如果x> y,那么这个函数将返回1,其他明智的返回0。
到目前为止我已经
了int isitGreater(int x, int y) {
return (((y+((~x)+1)) >> 31) & 1);
但它不起作用。
允许的操作:法律操作:! 〜& ^ | +<< >>
我确信我的逻辑是正确的,如果X - Y和我得到负数,那意味着y> x,因此第32位是1,所以我将该位向右移动31次,然后将“和”移到“1”。
编辑:如果x由于溢出而为负,则不起作用。如何在不使用条件语句的情况下修复此溢出问题?
答案 0 :(得分:3)
您的代码适用于我。请提交有效的问题。
编辑:如果x为-2147483648,您的算法将无法正常工作,因为 - ( - 2147483648)(或等效地,〜(-2147483648)+1)溢出。
答案 1 :(得分:1)
你不能采用2的补码:-2147483648 [0x80000000]。