c

时间:2016-02-16 10:04:31

标签: c binary

我有一个变量列表,请注意每个变量只有一个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来:

  1. 跑得快。
  2. 跨平台(linux和windows)。
  3. bounder值可以更改为另一个变量,如c或e ...(运行时,至少编译时)

2 个答案:

答案 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;
}