循环比特可以通过以下几种方式完成:
1
.以下是第一种方法的示例:
unsigned int bits = ...;
while (bits) {
if (bits & 1) {
// Current bit is set to 1
} else {
// Current bit is set to 0
}
bits >>= 1;
}
Run Code Online (Sandbox Code Playgroud)
如果要在达到零后继续使用位,请创建一个单独的计数器.
以下是第二种方法的示例:
unsigned int bits = ...;
for (int pos = 0 ; pos != 16 ; pos++) {
if (bits & (1 << pos)) {
// Current bit is set to 1
} else {
// Current bit is set to 0
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,从最低位到最高位,你可以像这样循环:
unsigned char somebyte = ...;
for (int i = 0; i < 8; ++i, somebyte >>= 1) {
if (somebyte & 0x1) {
// Do stuff for 1 bit
} else {
// Do stuff for 0 bit
}
}
Run Code Online (Sandbox Code Playgroud)
但这是一个非常通用的用例;通常,您希望并行化您的工作(一次对整个字节进行操作),或者仅对 1 位进行操作(并在用完时停止而不是完成所有八个循环)等。需要更多上下文来解决特定问题问题而不是一般的循环。许多具体问题可以通过巧妙的技巧得到最有效的解决。