使用位运算符执行此操作

时间:2013-08-23 03:58:24

标签: c bit-manipulation

如果0到255之间的整数等于0或等于224,我想要eval。

我有这段代码:

if (!num || 224 == num)

有没有办法使用一些按位操作?

我试过这个,我有效:0,31,32,63,64,95,96,127,128,159,160,191,192,223,224,255。明显不好因为我只需要0和224。

!((num+1) & 30)

3 个答案:

答案 0 :(得分:1)

是的,输入的范围使其更容易。

您可以使用(x - 1) >> 31来检测x是否为0(技术上不可移植,但通常会有效)

它依赖于x永远不会小于0,并且,非移植,在右移上,有条件的int是算术移位(通常是这种情况)。

同样,您可以使用((x ^ 224) - 1) >> 31来检测224。

把它们放在一起就像这样:

int mask = ((x - 1) >> 31) | (((x ^ 224) - 1) >> 31);

然后你去。

答案 1 :(得分:0)

abs(2x-A) == A浮现在脑海中(其中A是你的常数224),但abs()可能在内部进行比较,减法几乎不是一点操作。你究竟想做什么,这是为了速度还是只是好奇心?

另一个想法是模x%A == 0,但对于A的所有倍数,这也会返回true。(448,672,...)

答案 2 :(得分:-2)

if (!num^0x3F) {
  // a little less readable
}