使用C中的按位运算符查找x是否大于y

如果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为负,由于溢出,这不起作用。 如何在不使用条件语句的情况下修复此溢出问题?

你的代码对我来说很好。 请提交有效的问题。

编辑:如果x是-2147483648,您的算法将无法正常工作,因为 – ( – 2147483648)(或等效地,〜(-2147483648)+1)溢出。

你不能采用2的补码:-2147483648 [0x80000000]。