小航的水果店与小白鼠测毒瓶 | 趣味C++课堂
观看动画,跟随小航一起探索二进制的秘密
填写代码空缺,实现十进制转二进制,帮小航打印水果标签!
本节课3大模块、12个核心知识点,标注重点内容
二进制只有两个数字:0 和 1。计数规则是"逢二进一"。
十进制有0-9共10个数字,逢十进一;二进制只有0和1,逢二进一。
二进制每一位的"权重"从右往左是 1, 2, 4, 8, 16... 即第n位的位权是2的n次方。
每一位乘以对应的位权,然后相加。
不断除以2,记录余数,直到商为0,最后余数从下往上排列。
第一次的余数是最低位(最右边),最后一次的余数是最高位(最左边)。
每步写清商和余数;余数只能是0或1;商为0停止;从最后一个余数往前读;用位权展开法验证。
条件为真时重复执行。while(n > 0) 表示商大于0时继续循环。
% 得到余数(0或1),/ 得到商(整数部分)。
用十进制整数的每一位存二进制的每一位。weight记录当前位权重,余数×weight累加到result。
weight从1递增,先得的余数放个位(最低位),后得的放十位、百位... 自然按顺序排列!
用"变量跟踪表"记录每次循环后n、余数、weight、result的值,能清晰看到程序执行过程。
① 二进制的定义(只有0和1,逢二进一)
② 位权的概念(1, 2, 4, 8, 16... 2的n次方)
③ 除2取余法(手动转换十进制→二进制)
④ while循环(条件循环,n>0时继续)
⑤ 权重累积法(不用数组,用十进制数位存二进制数位)
5道单选题 + 3道判断题,提交后查看答案和解析
二进制只有0和1两个数字,计数规则是"逢二进一"。这是二进制最基本的定义。
位权展开法:101 = 1×4 + 0×2 + 1×1 = 4 + 0 + 1 = 5。从右往左,第一位位权是1,第二位是2,第三位是4。
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 ✓
% 是取余运算符,n % 2 得到n除以2的余数(只能是0或1)。/ 是整除运算符,n / 2 得到商。两者配合实现除2取余法。
这是权重累积法最巧妙的地方!用一个十进制整数的每一位来存储二进制的每一位:个位存二进制最低位,十位存次低位,百位存第三位... weight从1开始,每次×10升级(1→10→100→1000),这样先得到的余数自然放在低位,后得到的放在高位,完全不需要数组和逆序输出!
二进制的计数规则是"逢二进一",因为二进制只有0和1两个数字。"逢十进一"是十进制的规则。
第一次除以2得到的余数是二进制数的最低位(最右边),最后一次得到的余数才是最高位(最左边)。所以除2取余法最后要把余数"从下往上"逆序排列。
正确!权重累积法用一个十进制整数的每一位来存储二进制的每一位。weight从1开始递增(1→10→100→1000),先得到的余数乘以1放在个位(二进制最低位),后得到的余数乘以10放在十位... 余数自然按从低位到高位的顺序排列,所以完全不需要数组存储,也不需要逆序输出!这正是权重累积法的巧妙之处。