第13课 二进制的秘密

小航的水果店与小白鼠测毒瓶 | 趣味C++课堂

🎬
课前动画
观看动画,进入二进制的奇妙世界
💻
课堂项目
在线代码编辑器,完成水果店标签打印机
📚
知识点体系
梳理本节课所有知识点,标注重点
✏️
课堂小测
5道单选+3道判断,检验学习成果
💡 如果动画无法正常显示,可以点击这里在新窗口打开。观看完动画后,点击左上角"返回主页",进入课堂项目开始编程!
fruit_label.cpp
#include <>
using namespace std;
int () {
    cout << "=== 水果店标签打印机 ===" << endl;
    cout << "请输入苹果数量(十进制):" << endl;
    int n;
    cin >> n;
    int result = ; // 存储二进制结果
    int weight = ; // 当前位权重(1,10,100...)
    // while循环:除2取余,权重累积
    while (n 0) {
        int r = n 2; // ①取余数(0或1)
        result = result + r * weight; // 余数放到对应位
        weight = weight 10; // ②权重升级(1→10→100)
        n = n 2; // ③更新商
    }
    cout << "二进制标签是:" << result << endl;
    return 0;
}

🎮 操作按钮

📤 输出结果

// 点击"运行程序"查看输出结果

💡 填空提示

  • ① 头文件:输入输出需要什么?
  • ② 主函数名是什么?
  • ③ result初始值应该是几?
  • ④ weight从几开始?(个位=1)
  • ⑤ 循环条件:商大于几继续?
  • ⑥ 取余用什么符号?
  • ⑦ 权重乘以几升级?(1→10→100)
  • ⑧ 更新商用什么符号?
📦 模块一:二进制基础概念

1. 二进制的定义 重点

二进制只有两个数字:0 和 1。计数规则是"逢二进一"。

0, 1, 10, 11, 100, 101, 110, 111, 1000...

2. 十进制与二进制对比

十进制有0-9共10个数字,逢十进一;二进制只有0和1,逢二进一。

十进制 5 = 二进制 101

3. 位权的概念 重点

二进制每一位的"权重"从右往左是 1, 2, 4, 8, 16... 即第n位的位权是2的n次方。

位权:2⁰=1, 2¹=2, 2²=4, 2³=8, 2⁴=16...

4. 二进制转十进制(位权展开法)

每一位乘以对应的位权,然后相加。

1011 = 1×8 + 0×4 + 1×2 + 1×1 = 11
🔄 模块二:十进制转二进制(除2取余法)

5. 除2取余法原理 重点

不断除以2,记录余数,直到商为0,最后余数从下往上排列。

除2 → 记余数 → 商继续除2 → 商为0停止 → 余数逆序

6. 为什么余数要逆序?

第一次的余数是最低位(最右边),最后一次的余数是最高位(最左边)。

先得的余数=低位,后得的余数=高位

7. 手动转换要点 重点

每步写清商和余数;余数只能是0或1;商为0停止;从最后一个余数往前读;用位权展开法验证。

验证:11011 = 16+8+0+2+1 = 27 ✓
💻 模块三:C++代码实现(权重累积法)

8. while循环 重点

条件为真时重复执行。while(n > 0) 表示商大于0时继续循环。

while(条件) { 循环体 }

9. 取余% 和 整除/

% 得到余数(0或1),/ 得到商(整数部分)。

27%2=1(余数), 27/2=13(商)

10. 权重累积法原理 重点

用十进制整数的每一位存二进制的每一位。weight记录当前位权重,余数×weight累加到result。

result += 余数 × weight; weight ×= 10;

11. 为什么不用数组和逆序?

weight从1递增,先得的余数放个位(最低位),后得的放十位、百位... 自然按顺序排列!

个位=最低位,十位=次低位,百位=第三位...

12. 变量跟踪与调试

用"变量跟踪表"记录每次循环后n、余数、weight、result的值,能清晰看到程序执行过程。

循环次数 | n | 余数 | weight | result

🎯 本节课5大重点知识

二进制的定义(只有0和1,逢二进一)
位权的概念(1, 2, 4, 8, 16... 2的n次方)
除2取余法(手动转换十进制→二进制)
while循环(条件循环,n>0时继续)
权重累积法(不用数组,用十进制数位存二进制数位)

🎉 答题完成!
0
第1题单选题
二进制数中,每一位只能是哪两个数字?

✅ 正确答案:A

二进制只有0和1两个数字,计数规则是"逢二进一"。这是二进制最基本的定义。

第2题单选题
二进制数 101 转换成十进制数是多少?(提示:位权从右往左是1, 2, 4)

✅ 正确答案:B

位权展开法:101 = 1×4 + 0×2 + 1×1 = 4 + 0 + 1 = 5。从右往左,第一位位权是1,第二位是2,第三位是4。

第3题单选题
用除2取余法将十进制数 13 转换成二进制,结果是?

✅ 正确答案:B

13÷2=6余1,6÷2=3余0,3÷2=1余1,1÷2=0余1。余数从下往上读:1101。验证:1×8+1×4+0×2+1×1=13 ✓

第4题单选题
在C++中,n % 2 的作用是什么?

✅ 正确答案:B

% 是取余运算符,n % 2 得到n除以2的余数(只能是0或1)。/ 是整除运算符,n / 2 得到商。两者配合实现除2取余法。

第5题单选题(难)
权重累积法中,weight变量每次循环后乘以10(weight = weight * 10),这样做的目的是什么?

✅ 正确答案:B

这是权重累积法最巧妙的地方!用一个十进制整数的每一位来存储二进制的每一位:个位存二进制最低位,十位存次低位,百位存第三位... weight从1开始,每次×10升级(1→10→100→1000),这样先得到的余数自然放在低位,后得到的放在高位,完全不需要数组和逆序输出!

第6题判断题
二进制数的计数规则是"逢十进一"。

✅ 正确答案:❌ 错误

二进制的计数规则是"逢二进一",因为二进制只有0和1两个数字。"逢十进一"是十进制的规则。

第7题判断题(中)
用除2取余法转换十进制数时,第一次除以2得到的余数是二进制数的最高位(最左边)。

✅ 正确答案:❌ 错误

第一次除以2得到的余数是二进制数的最低位(最右边),最后一次得到的余数才是最高位(最左边)。所以除2取余法最后要把余数"从下往上"逆序排列。

第8题判断题(难)
权重累积法实现十进制转二进制时,不需要使用数组,也不需要逆序输出。

✅ 正确答案:✅ 正确

正确!权重累积法用一个十进制整数的每一位来存储二进制的每一位。weight从1开始递增(1→10→100→1000),先得到的余数乘以1放在个位(二进制最低位),后得到的余数乘以10放在十位... 余数自然按从低位到高位的顺序排列,所以完全不需要数组存储,也不需要逆序输出!这正是权重累积法的巧妙之处。