条件检查由按位运算符替换

时间:2015-04-20 19:10:34

标签: c

int x1 =-2 ;//any value
if(x1 < 0)
   x1 = 0;

我正在尝试使用按位运算符

int result = !(x1 >> 31) & (((~x1 + 1) >> 31) & 1);
    x1 = result !=0 ? x1:result;

我不想使用条件运算符来探索更多二元运算符的使用。这背后没有任何其他内涵。如果有任何方法,请告诉我。 有没有办法这样做?

1 个答案:

答案 0 :(得分:5)

假设32位整数和2位恭维,以下是否可以?

unsigned int x = (unsigned int)-2;
x &= (x >> 31) - 1;

我使用unsigned因为根据标准

  

E1 >> E2的结果是E1右移E2位位置。 ....如果E1有签名类型和负值,那么   结果值是实现定义的。