You need to enable JavaScript to run this app. 如何设置第n位并清除该位左侧位 C语言位操作习题求解
优惠活动
大模型
产品
解决方案
定价
更多

如何设置第n位并清除该位左侧位 C语言位操作习题求解

问题原因

你代码的逻辑本身没有问题,出现偏差的核心是题目采用1基位编号规则(最右侧最低位为第1位),而你写代码时用了编程中默认的0基位编号,同时位的左右定义和二进制书写顺序一致:高位在左,第n位的左侧相邻位就是编号比n大1的位。

修正方案

只需要把题目给出的n先转换为0基编号(减1)即可适配你的逻辑:

int main() {
    // 可切换a和n的值测试两个示例
    unsigned char a = 0x20;
    unsigned char res;
    int n = 5;
    
    // 题目n为1基,转换为编程用0基
    int n_zero = n - 1;
    // 第n位置1
    res = a | (1 << n_zero);
    // 清除第n位左侧相邻位
    res = res & ~(1 << (n_zero + 1));

    printf("The result is: 0x%x\n", res);
    return 0;
}
结果验证
  • 第一个示例(a=0x20,n=5):
    转换后0基编号为4,置位4得到0x30,清除位5后得到0x10,符合预期
  • 第二个示例(a=0xFB,n=3):
    转换后0基编号为2,置位2得到0xFF,清除位3后得到0xF7,符合预期
    如果题目给出的第二个示例n=2是0基编号,直接用你原有代码即可得到正确结果。

内容的提问来源于stack exchange,提问作者Iulian B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 06:15:02