我正在读一段代码,它应该使用byte数组实现一个位向量。
其思想是,如果在相应位置存在数字,则位向量具有位设置。
例如,如果数字10存在,则必须设置位10,等等。这是一个经典的概念,我理解它,但我不确定实际的实现。
我不明白的是:
bitvector [num / 8] |= 1 << (num % 8);
其中num是要设置的数字。
如果num是10,那么必须使用第二个字节(到目前为止num/8还可以),但是1 << (num % 8)没有像它应该的那样设置第二个字节的第二位。是吗?
发布于 2012-04-02 02:48:38
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).发布于 2012-04-02 02:51:12
您几乎是对的:这段代码设置第二个字节的第三位。10/8 == 1和10%8 == 2。所有的值都是1,所以10表示“位数11”,1表示“第二个字节”,因此设置第二个字节的第三位对于参数10是正确的。
发布于 2012-04-02 02:51:53
如果“第一个”位是最低有效位,就会发生这种情况。这是一种有效的定义方式。我假设您认为第一位是最重要的位,在这种情况下,您需要移位(7 - (num % 8))。你也可以这样做。
https://stackoverflow.com/questions/9967184
复制相似问题