我有一个变量列表,请注意每个变量只有一个1
处于二进制形式的不同位置:
int a = 0x00000001;
int b = 0x00000002;
int c = 0x00000004;
int d = 0x00000008;
int bounder = d;
int e = 0x00000010;
int f = 0x00000020;
新变量X可以设置为上面任何变量的bitwise OR
,如:
int X = a | b | d | f;
我需要一个函数f
来检查给定的X(X >= bounder)
,它是bitwise OR
变量的值<莽汉。例如:
f(a|d) return true
f(a|b|c|e) return true
f(e|f) return false
我写道:
bool f(int x) {
return x << 29;
}
但29是一个硬编码,如果我改变bounder值,我不能忘记改变29 aslo。我不确定这是跨平台(int二进制表示可能不同吗?)
我需要f来:
答案 0 :(得分:2)
要检查x
中的任何位是否设置为小于bounder
:
bool f(unsigned int x, unsigned int bounder)
{
return ((x & (bounder - 1)) != 0);
}
-1
是关键,因为它会生成一个掩码,其中所有需要检查的位都设置为1
。
答案 1 :(得分:0)
就我理解你的要求而言,这就完成了工作
bool f(int x, int upper_bound)
{
return x < upper_bound;
}