仅使用按位运算在C中实现更大的等号

时间:2012-11-15 11:38:43

标签: c comparison bit-manipulation bitwise-operators

我知道许多基本操作(如加法或除法)也可以仅使用按位运算符在C中实现。如何使用大于或等号(> =)来做同样的事情?

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

3 个答案:

答案 0 :(得分:1)

我能想到的最简单的解决方案:

#include <limits.h>

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

如果您不喜欢==,请使用XOR进行等于测试:

#include <limits.h>

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

答案 1 :(得分:0)

如果您只想要if (x >= 0),那么这就足够了

if (~x & INT_MIN)

如果你的意思是&#34;大于或等于&#34;一般来说,在2个数字之间,它会有更大的差异

答案 2 :(得分:-1)

如果您只能使用按位运算符,甚至禁用比较运算符,则无法实现(实际上,几乎没有任何可能)。隐式比较始终存在,即使if(x some bitwise stuff)等操作实际上也被解释为生成的汇编代码中等效于if(x some bitwise stuff) != 0)