十进制转二进制:凑数法(填1法)

十进制转二进制:凑数法(填1法)

一、先搞懂:二进制的每一位"值多少钱"

十进制里,每一位有自己的"身价":个位是1,十位是10,百位是100。

二进制也一样,只不过身价不是10倍10倍地涨,而是2倍2倍地涨:

位置 第8位 第7位 第6位 第5位 第4位 第3位 第2位 第1位
身价 128 64 32 16 8 4 2 1

这一行就是整个方法的"工具"。 每次做题前,先把它默写出来。

怎么记?从1开始,每次翻倍:1、2、4、8、16、32、64、128。

二、二进制的规则只有一条

每一位只能填 0 或 1:

  • 填 1:表示"这一位的身价我要了"
  • 填 0:表示"这一位的身价我不要"

所以二进制数 00101101 的意思是:把填了1的那些位的身价加起来。

32 + 8 + 4 + 1 = 45

所以 00101101 就是十进制的45。

转换其实就是这个过程倒过来: 给你45,让你找出该选哪几个身价,加起来正好是45。

三、凑数法的操作步骤

从最大的身价(128)开始,从大到小逐个判断:

  1. 手里剩下的数,够不够减这一位的身价?
  2. 够减 → 这一位填 1,然后把身价减掉,剩下的数继续往下走
  3. 不够减 → 这一位填 0,剩下的数不变,继续往下走
  4. 一直走到最后一位(身价1),剩下的数应该正好是0

四、例题1:把 45 转成二进制

先写出工具:

身价 128 64 32 16 8 4 2 1

手里的数:45

  • 128 :45 够减128吗?不够 → 填 0,还是45
  • 64 :45 够减64吗?不够 → 填 0,还是45
  • 32 :45 ≥ 32,够! → 填 1 ,45 − 32 = 13
  • 16 :13 够减16吗?不够 → 填 0,还是13
  • 8 :13 ≥ 8,够! → 填 1 ,13 − 8 = 5
  • 4 :5 ≥ 4,够! → 填 1 ,5 − 4 = 1
  • 2 :1 够减2吗?不够 → 填 0,还是1
  • 1 :1 ≥ 1,够! → 填 1 ,1 − 1 = 0 ✓

结果:

身价 128 64 32 16 8 4 2 1
填写 0 0 1 0 1 1 0 1

45 = 00101101(二进制) ,前面的0可以省略,写成 101101 也行。

最后剩下0,说明没算错。

五、例题2:把 200 转成二进制

手里的数:200

  • 128 :200 ≥ 128 → 填 1 ,200 − 128 = 72
  • 64 :72 ≥ 64 → 填 1 ,72 − 64 = 8
  • 32 :8 不够 → 填 0
  • 16 :8 不够 → 填 0
  • 8 :8 ≥ 8 → 填 1 ,8 − 8 = 0
  • 4 :0 不够 → 填 0
  • 2 :0 不够 → 填 0
  • 1 :0 不够 → 填 0

结果:200 = 11001000(二进制)

小发现: 当手里的数减到0了,后面所有位自动填0,不用再算。

六、检验:怎么知道自己做对了?

把填1的那些位的身价加起来,看是不是等于原来的数。

检验200:128 + 64 + 8 = 200 ✓

这一步一定要养成习惯,只要几秒钟,能抓住绝大多数粗心错误。

七、几个常见问题

Q:我怎么快速判断从哪一位开始?

找不超过目标数的最大身价。比如目标是45,最大的不超过45的身价是32,那么32前面的位(64、128)全是0。

Q:最多能表示多大的数?

8位全填1:128+64+32+16+8+4+2+1 = 255。所以这个方法适用于0到255之间的数。

Q:超过255怎么办?

很简单,把工具表往左再延长:256、512、1024......继续翻倍,方法完全不变。

八、自己练习

先自己做,再看答案。

  1. 13
  2. 37
  3. 100
  4. 150
  5. 255

答案

  1. 13 = 00001101(8 + 4 + 1)
  2. 37 = 00100101(32 + 4 + 1)
  3. 100 = 01100100(64 + 32 + 4)
  4. 150 = 10010110(128 + 16 + 4 + 2)
  5. 255 = 11111111(全部都要)

九、一句话总结

写出身价表 → 从大到小逐位问"够减吗" → 够就填1并减掉,不够就填0 → 最后剩0说明对了。

这个方法的好处是:每一步你都知道自己在干什么,因为你始终在回答同一个问题------"这一位的身价,我要不要?"

相关推荐
唐墨1231 小时前
linux kernel 比较数据大小的宏定义
linux·算法
拂拉氏1 小时前
【知识讲解-题目讲解】 统计满足K约束的子字符串数量2 (滑动窗口+前缀和+二分查找+分析)
算法·前缀和·二分查找·滑动窗口
通信小呆呆6 小时前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
笑容掩饰我的失落6 小时前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black7 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_967979129 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔9 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆10 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac
老师我太想进步了202610 小时前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
希望我万事顺遂11 小时前
力扣hot100-滑动窗口最大值
数据结构·算法·leetcode