如何判断给定数字中指定比特位的值为1还是0?
判断数字中指定比特位的值(1或0)
判断单个比特位的值,核心用**按位与(&)**操作配合掩码实现,步骤如下:
核心逻辑
- 生成掩码:将数字1的二进制位左移指定索引位(
1 << bit_index),得到仅目标位为1、其余位为0的掩码。 - 按位与运算:原数字和掩码执行按位与操作。若结果非0,说明目标位是1;结果为0则目标位是0。
示例验证
以你给出的数字0b00001101(十进制13)为例:
- 检查索引0:掩码为
1 << 0 = 0b00000001,13 & 1 = 1(非0)→ 该位为1(true) - 检查索引1:掩码为
1 << 1 = 0b00000010,13 & 2 = 0→ 该位为0(false) - 检查索引2:掩码为
1 << 2 = 0b00000100,13 & 4 = 4(非0)→ 该位为1(true)
代码实现
Python
def check_bit(num, bit_index): mask = 1 << bit_index return (num & mask) != 0 # 测试 target_num = 0b00001101 print(check_bit(target_num, 0)) # 输出 True print(check_bit(target_num, 1)) # 输出 False
C语言
#include <stdbool.h> #include <stdio.h> bool check_bit(unsigned int num, int bit_index) { unsigned int mask = 1u << bit_index; return (num & mask) != 0; } int main() { unsigned int target_num = 0b00001101; printf("%d\n", check_bit(target_num, 0)); // 输出 1(对应true) printf("%d\n", check_bit(target_num, 1)); // 输出 0(对应false) return 0; }
注意事项
- 比特位索引通常从右往左计数,最右侧的最低位为索引0,和你的示例规则一致。
- 处理无符号整数时更安全,避免符号位干扰(比如C语言中用
unsigned int)。
内容的提问来源于stack exchange,提问作者Jonas Salys
相关产品推荐
相关产品推荐

