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

十进制、二进制与按位与或异或

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

按位与:两个数右对齐,一列一列算,同一列都是 1 才得 1

a = 6

b = 3

a & b

0

0

0

0

0

1

1

0

0

0

0

0

0

0

1

1

0

0

0

0

0

0

1

0

计算机里的整数都是用二进制存的:只有 0 和 1,从右往左每一位分别代表 1、2、4、8、16……。比如 13 = 8 + 4 + 1,写成二进制是 1101。

十进制转二进制:不停地除以 2、记下余数,最后倒着读。13 → 余 1,6 → 余 0,3 → 余 1,1 → 余 1,倒着读就是 1101。

C 语言有四个「按位」算的运算符。先把数写成二进制、右边对齐,再一列一列地算:

  • & 按位与:这一列两个都是 1 才得 1;
  • | 按位或:有一个是 1 就得 1;
  • ^ 按位异或:两个不一样得 1,一样得 0;
  • ~ 按位取反:只跟一个数,每一位 0 变 1、1 变 0(下一题细说)。

注意 & 和第 ② 条路线学的 &&(逻辑与)不是一回事:&& 的结果只有 0 或 1。

做位运算时常用 unsigned int(无符号整数):它只存非负数,输出用 %u,不会冒出负数,最省心。

#include <stdio.h>

int main(void)
{
    unsigned int a = 12, b = 10;   /* 二进制 1100 和 1010 */
    printf("%u %u %u\n", a & b, a | b, a ^ b);
    return 0;
}

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

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