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) {
...
}
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) {
...
}
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
...
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
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.