有人私信问我「二进制」,我让他先把具体场景说清楚。他回了一长串,我看完了发现:他真正卡住的点,跟他以为的完全不是一回事。
动手前先准备这些
进制转换核心:十进制转N进制用"除N取余逆序法",N进制转十进制用"按权展开求和"。二进制转十六进制每4位一组,二进制转八进制每3位一组。十进制25=二进制11001=八进制31=十六进制19。同名不同制的单位最坑,看到名字一样先确认是不是同一套标准。进率记错一个数量级,结果差十倍,这是换算最常见的翻车点。
核心流程
二进制是计算机基础(0和1),十六进制是二进制的简写(4位二进制=1位十六进制),编程常用0x前缀。八进制用0前缀(易和十进制混淆,Python3已改0o)。记住A=10、F=15即可应付十六进制。换完用常识验一下数量级,差太多就是算反了。米、克、秒是国际单位制的根基,遇到不熟的单位先往这三个上靠。
实算一遍
先记进率。二进制这类换算,关键是记住两个单位之间的进率(倍数关系),然后乘或除就行。进率记错了,结果差几个数量级,这是最常见的错误。记核心进率即可,不用全背,剩下的靠中间单位推导。不熟的单位找个中间单位过渡,比死记所有两两关系靠谱。
具体怎么做
按下面这个顺序处理,最不容易出错:
- 第一步:十进制转N进制:用"除N取余逆序法",连续除N取余数,逆序排列
- 第二步:N进制转十进制:用"按权展开求和",每位×N的位次方相加
- 第三步:二进制转十六进制:从右往左每4位一组,每组转一位十六进制
- 第四步:二进制转八进制:每3位一组,每组转一位八进制
- 第五步:用十进制25验证:=11001(二进制)=31(八进制)=19(十六进制)
几个要注意的地方
这里头有几个雷区,我挨个点出来:
- 十六进制A=10、B=11、C=12、D=13、E=14、F=15
- 编程中十六进制常用0x前缀,八进制用0o(Python3)或0
- 颜色值#FFFFFF就是十六进制,每两位代表RGB一个通道
- 十进制小数转N进制用"乘N取整法",但可能无限循环
「二进制」的坑我踩过、也看过别人踩过。这篇把我能想到的都写了,希望你顺利绕开。
常见问题
【十进制怎么转二进制?】除2取余逆序法:25÷2=12余1、12÷2=6余0、6÷2=3余0、3÷2=1余1、1÷2=0余1,逆序读11001。二进制转十进制按权展开:11001=16+8+1=25。
【二进制和十六进制怎么换算?】每4位二进制=1位十六进制。二进制11001分组0011 0010(补齐)→3 2→0x19(其实25=0x19,分组11001→0001 1001→1 9→0x19)。记住0-15对应0000-1111即可。
【二进制怎么换算?】关键是记住进率(两单位的倍数关系),然后乘进率或除进率。不熟的单位找个中间单位过渡,换完用常识验数量级。用在线换算工具最省事。
【十六进制A到F代表多少?】A=10、B=11、C=12、D=13、E=14、F=15。十六进制0xFF=15×16+15=255,0x10=16。编程常用0x前缀,颜色值#FFFFFF就是十六进制。