首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在字节数组上构建位向量-了解位操作

在字节数组上构建位向量-了解位操作
EN

Stack Overflow用户
提问于 2012-04-02 02:46:03
回答 3查看 574关注 0票数 1

我正在读一段代码,它应该使用byte数组实现一个位向量。

其思想是,如果在相应位置存在数字,则位向量具有位设置。

例如,如果数字10存在,则必须设置位10,等等。这是一个经典的概念,我理解它,但我不确定实际的实现。

我不明白的是:

bitvector [num / 8] |= 1 << (num % 8);

其中num是要设置的数字。

如果num是10,那么必须使用第二个字节(到目前为止num/8还可以),但是1 << (num % 8)没有像它应该的那样设置第二个字节的第二位。是吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-02 02:48:38

10 % 8 = 2,因此为1 << (10 % 8) = bit 2或值4(二进制为100)

(从字节的右侧开始计数,从零开始)。验证非常简单:

代码语言:javascript
复制
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).
票数 2
EN

Stack Overflow用户

发布于 2012-04-02 02:51:12

您几乎是对的:这段代码设置第二个字节的第三位。10/8 == 110%8 == 2。所有的值都是1,所以10表示“位数11”,1表示“第二个字节”,因此设置第二个字节的第三位对于参数10是正确的。

票数 1
EN

Stack Overflow用户

发布于 2012-04-02 02:51:53

如果“第一个”位是最低有效位,就会发生这种情况。这是一种有效的定义方式。我假设您认为第一位是最重要的位,在这种情况下,您需要移位(7 - (num % 8))。你也可以这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9967184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档