我有一个变量列表,请注意每个变量只有一个 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是硬代码,如果我更改边界值,我也不会忘记更改29。我不确定这是跨平台的(int 二进制表示可能不同?)
我需要 f 来:
- 跑得快。
- 跨平台(Linux 和 Windows)。
- 边界值可以更改为另一个变量,例如 c 或 e...(运行时,至少是编译时)
最佳答案
要检查 x
中是否设置了小于 bounder
的任何位,请执行以下操作:
bool f(unsigned int x, unsigned int bounder)
{
return ((x & (bounder - 1)) != 0);
}
-1
是关键,因为它会生成一个掩码,该掩码将所有需要检查的位设置为 1
。
关于c - c中的变量按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35429395/