C#中如何将变量的指定比特位与特定整数n进行比较
比特段比较实现方案
原代码问题分析
你写的代码仅提取了a的最低1位(运算结果只能是0或1),完全没有覆盖你需要的低4位区间,自然无法完成比较逻辑。
低4位比较的正确写法
要提取a的低4位,只需要用4位全1的掩码0xf和a做按位与,得到低4位对应的整数值后直接比较即可:
while( (a & 0xf) > n );
通用任意比特段比较方法
如果需要提取任意位置的连续比特段做比较,可以按以下步骤实现:
- 确定要提取的比特段起始位
start_bit(最低位为bit0,从0开始计数)、比特段长度len - 生成对应掩码:
mask = ((1 << len) - 1) << start_bit - 提取比特段并转换为普通整数:
val = (a & mask) >> start_bit - 直接比较val和目标值n即可
示例:提取a的bit5~bit2(共4位,起始位为2,长度为4)和n比较:
int start_bit = 2; int len = 4; int mask = ((1 << len) - 1) << start_bit; while( ((a & mask) >> start_bit) > n );
注意事项
- 确认n的取值不超过提取比特段的最大值,比如4比特段最大值为15,若n>15,比较结果永远为假
- 比特位操作建议使用无符号整数类型,避免有符号数算术右移带来的符号位干扰
内容的提问来源于stack exchange,提问作者brrrrrrrrrrrrrr
相关产品推荐
相关产品推荐

