问题
If x > y, then this function will return 1, other wise return 0.
so far i have
int isitGreater(int x, int y) {
return (((y+((~x)+1)) >> 31) & 1);
but it's not working.
Allowed ops: Legal ops: ! ~ & ^ | + << >>
I'm sure I have the logic right, if X - Y and I get a negative number, that means y > x , so therefore the 32nd bit is a 1, so I shift that bit to the right 31 times and then "and" it with "1".
edit: this does not work if x is negative, due to overflow. how can i fix this overflow problem without using conditional statements?
回答1:
Your code works fine for me. Please submit a valid question.
Edit: Your algorithm will not work correctly if x is -2147483648 because -(-2147483648) (or, equivalently, ~(-2147483648)+1) overflows.
回答2:
You can't take the 2's complement of: -2147483648[0x80000000].
来源:https://stackoverflow.com/questions/12524038/find-if-x-is-bigger-than-y-using-bitwise-operator-in-c