如果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)
答案 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
}