我正在阅读一个代码,它应该使用byte
数组来实现位向量
想法是如果在相应位置存在数字,则位向量具有位设置
例如。如果存在数字10,则必须设置位10等。这是一个经典概念,我得到它,但我不确定实际的实现。
我没有得到的部分是:
bitvector [num / 8] |= 1 << (num % 8);
num
是要设置的数字
如果num为10,则必须使用第二个字节(到目前为止num/8
确定),但1 << (num % 8)
不会设置第二个字节的第二个位。可以?
答案 0 :(得分:2)
10 % 8 = 2
,因此1 << (10 % 8) = bit 2
或值4(二进制100)
(从字节右侧开始计数位,从零开始)。验证非常简单:
7 -> 7 % 8 = 7, byte[0], Bit 7 (1 << 7).
8 -> 8 % 8 = 0, byte[1], Bit 0 (1 << 0).
9 -> 9 % 8 = 1, byte[1], Bit 1 (1 << 1).
10 -> 10 % 8 = 2, byte[1], Bit 2 (1 << 2).
答案 1 :(得分:1)
你几乎是对的:这段代码设置了第二个字节的第三个位。 10/8 == 1
和10%8 == 2
。一切都是一个,所以10表示“位号11”,1表示“第二个字节”,因此设置第二个字节的第三个位对于参数10是正确的。
答案 2 :(得分:1)
如果“第一”位是最低有效位,则确实如此。这是定义它的有效方法。我假设您认为第一位是最重要的位,在这种情况下您需要移位(7 - (num % 8))
。你也可以这样做。