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

时间:2012-09-21 03:58:09

标签: c bit-manipulation

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

2 个答案:

答案 0 :(得分:3)

您的代码适用于我。请提交有效的问题。

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

答案 1 :(得分:1)

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