怎么做
  1. 题面里的虚线方框就是要填的空
  2. 点候选项,它会填进当前高亮的那个空
  3. 点已填好的空,可以把选项取回来重选
  4. 全部填满后「提交」才会亮起
卡住了就点右下角的 👩‍🏫 问 AI 老师,她会给提示但不直接给答案。

掩码:查、开、关、翻转

👁️ 31 人浏览 💬 0 人评论 ❤️ 添加收藏

掩码 m 只有第 1 位是 1:只动这一列,其余列原样不动

x

0

1

1

0

0

1

0

0

m = 1<<1

0

0

0

0

0

0

1

0

x | m

0

1

1

0

0

1

1

0

x & ~m

0

1

1

0

0

1

0

0

x ^ m

0

1

1

0

0

1

1

0

想对 x 的第 k 位动手、又不碰别的位,先造一把「尺子」:m = 1u << k,它只有第 k 位是 1。这把尺子叫掩码。

  • 查:x & m 不等于 0,说明第 k 位是 1;
  • 置 1:x | m(和 1 或,一定变 1;和 0 或,不变);
  • 清 0:x & ~m(~m 只有第 k 位是 0,和 0 与,一定变 0);
  • 翻转:x ^ m(和 1 异或,0 变 1、1 变 0)。

和 += 一样,位运算也有复合赋值:x |= m 就是 x = x | m,还有 &=、^=、<<=、>>=。

#include <stdio.h>

int main(void)
{
    unsigned int x = 90;   /* 二进制 0101 1010 */
    printf("%u ", x | (1u << 0));
    printf("%u ", x & ~(1u << 3));
    printf("%u\n", x ^ (1u << 7));
    return 0;
}

程序输出的三个数依次是【0】、【1】、【2】。

请登录后作答。
去登录
👩‍🏫
AI
💬 题目评论
🔒 登录并作答后可看讨论