我发现这段代码(没有双关语意)解决了我需要解决的问题,但我并不真正理解 (i & (1 << j)) 部分的作用。是否有更“高级”的编写方式以便我理解?还是用不那么“纯粹”的不同方式做同样的事情?
//this is not the actual code, just bits of it so you have an idea of how the variables are used
for (i = 0; i < vectorsize; i++) {
void findsubsets(unsigned int *value, int n, int i)
}
void findsubsets {
for (j = 0; j < n; j++) {
if (i & (1 << j)) {
//print something
}
}
}
我想要该声明的替代方案,它做同样的事情(或者更确切地说,解决同样的问题)但更“平常”。我当然只是指按位移位。
最佳答案
那是很“平常”的。它测试 i
的第 j 位是否已设置。另一种方法是 if ((i >> j) & 1)
。
如果你希望它是 self 记录的,写一个很好命名的辅助函数:
bool jth_bit(int i, int j) { return (i >> j) & 1; }
(根据您使用的 C 版本,您可能需要 _Bool
而不是 bool
)
关于c - 是否有更简单、更少机器级的表达方式或与 (i & (1 << j)) 相同的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57916116/