检查一下

C 风格的位操作

可以通过将数字向右移动 1 次然后在其上执行按位 AND(&)来获得该位的值:

(number >> x) & 1LL;  // 1 if the 'x'th bit of 'number' is set, 0 otherwise

右移操作可以实现为算术(带符号)移位或逻辑(无符号)移位。如果表达式 number >> x 中的 number 具有有符号类型和负值,则结果值是实现定义的。

如果我们直接就地获得该位的值,我们可以改为左移掩码:

(number & (1LL << x));  // (1 << x) if the 'x'th bit of 'number' is set, 0 otherwise

两者都可以用作条件,因为所有非零值都被认为是真的。

使用 std::bitset

std::bitset<4> num(std::string("0010"));
bool bit_val = num.test(1);  // bit_val value is set to true;