Implement greater equal sign in C using only bitwi

2019-06-02 10:56发布

问题:

I know that many basic operations like addition or division can also be implemented in C using only bitwise operators. How can I do the same with the greater than or equal sign (>=)?

if (x >= 0) {
    ...
}

回答1:

Simplest solution I can come up with:

#include <limits.h>

if ((x & INT_MAX) == x)    // if (x >= 0)
    ...

If you don't like the == then use XOR to do the equals test:

#include <limits.h>

if ((x & INT_MAX) ^ x)    // if (x < 0)
    ...
else                      // else x >= 0
    ...


回答2:

If you only want if (x >= 0) then this is enough

if (~x & INT_MIN)

If you mean "greater than or equal" between 2 numbers in general then it's a lot more difference



回答3:

If all you can use is bitwise operators and even the comparison operators are disabled, it's not possible (actually, almost nothing would be possible). Implicit comparison is always present, even operations such as if(x some bitwise stuff) are actually interpreted as an equivalent to if(x some bitwise stuff) != 0) in the generated assembly code.