我正在对可变长度位字符串进行一些位操作。
我定义了一个函数,该函数应该对变量setBits(char *res, int x, int y)
传递的位字符串起作用,给定 a和(顺便提一下,我正在尝试使用每 x 8 位来实现类似于 Bloom 过滤器的东西):*res
x
y
void setBits(char *res, int x, int y)
{
*res |= x << (y * 8)
}
例如,给定以下 xy-vectors {0,0} ; {0,1} ; {1,2} ; {2,3}
,我希望有这样的位字符串(反之亦然,具体取决于小端或大端,但这现在并不重要):
0000 0010 0000 0001 0000 0000 0000 0000
所以最低8位应该来自{0,0}
,第二个8位来自{0,1}
,接下来的8位来自{1,2}
,最后一个来自{2,3}
。
不幸的是,我似乎不明白为什么,setBits
总是只返回最后一个结果(在这种情况下,即来自 的位串{2,3}
)。我调试了代码并意识到它*res
总是 0 - 但是为什么呢?我究竟做错了什么?是我选择char*
它不起作用还是我完全错过了一些非常愚蠢的东西?