0

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

4

2 回答 2

3

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

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

于 2012-09-21T04:19:41.353 回答
1

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

于 2012-09-21T04:15:01.063 回答