Implement greater equal sign in C using only bitwise operations

后端 未结 3 802
生来不讨喜
生来不讨喜 2021-01-15 23:59

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 s

相关标签:
3条回答
  • 2021-01-16 00:37

    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.

    0 讨论(0)
  • 2021-01-16 00:39

    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
        ...
    
    0 讨论(0)
  • 2021-01-16 00:42

    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

    0 讨论(0)
提交回复
热议问题