Find if x is bigger than y using bitwise operator in C [closed]

喜夏-厌秋 提交于 2019-12-04 06:02:18

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!