如果 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)
最佳答案
是的,输入的范围使其变得稍微容易一些。
您可以使用(x - 1) >> 31
来检测x
是否为0(技术上不可移植,但通常可以工作)
它依赖于 x
永远不会小于 0,并且不可移植地依赖于有符号 int 上的右移是算术移位(通常是这种情况)。
同样,您可以使用 ((x ^ 224) - 1) >> 31
来检测 224。
就像这样把它们放在一起:
int mask = ((x - 1) >> 31) | (((x ^ 224) - 1) >> 31);
就这样。
关于c - 使用位运算符执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18394457/