我有一个字节数组表示为位运算和int
char * bytes = getbytes(object); //some api function
我想检查在一些位置x处的位是否被设置。
我一直想这个
int mask = 1 << x % 8;
y= bytes[x>>3] & mask;
然而Ÿ收益都为零?我做错了什么,是否有更简单的方法来检查是否设置了一点?
编辑:
我也运行此。它也没有以预期的结果返回。
int k = x >> 3;
int mask = x % 8;
unsigned char byte = bytes[k];
return (byte & mask);
它失败了一个断言真正的ctest我跑了。字节和掩码此时分别从“gdb”打印“0002”和2。
编辑2:这是我如何设置位的第一位。我只是想写一个测试来验证它们是否已设置。
unsigned long x = somehash(void* a);
unsigned int mask = 1 << (x % 8);
unsigned int location = x >> 3;
char* filter = getData(ref);
filter[location] |= mask;
括号'()'是你的朋友。 – Yunnosch
表达对我来说很好。 'y'的类型是什么? 'bytes'指向'char'的连续内存区域吗? – nglee
混淆的一个可能的来源是位端。现在,您的代码将“x = 0”解释为第一个字节的最低有效位。 – user3386109