gpt4 book ai didi

c - 以下程序中位掩码的使用来自 Programming Pearls

转载 作者:太空狗 更新时间:2023-10-29 17:11:28 25 4
gpt4 key购买 nike

我今天开始阅读“Programming Pearls”,在做练习时遇到了这个问题“你将如何实现你自己的位 vector ?”。当我查看解决方案时,它是这样的:

#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000

int a[1 + N/BITSPERWORD];

void set(int i) { a[i >> SHIFT] |= (1 << (i & MASK));

我对这句话感到困惑的地方

 1 << (i & MASK)

有人可以向我解释一下这是怎么回事吗?

最佳答案

请注意 MASK被设置为具有最低的 SHIFT位集,其中 SHIFT恰好是 BITSPERWORD 的以 2 为底的对数.

因此(i & MASK)将选择 i 的最低 5 位,这与除以 32 后的余数相同(例如,只需考虑取十进制数的最低两位数如何得到除以 100 后的余数)。这给出了我们感兴趣的单词的位数。

1 << (i & MASK)) (顺便说一下,这是一个表达式,而不是一个语句)现在创建一个值,其中正好设置了我们感兴趣的位。使用 |= 将该值合并到内存字中将设置位 vector 的所需位。

关于c - 以下程序中位掩码的使用来自 Programming Pearls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com