当前位置: 首页 > article >正文

“进制转换”公式大集合

咱们都知道十进制是“逢10进1 ”,同理,N进制就是 “逢N进1”。进制其实就这么简单。它的麻烦之处在于各种进制之间的转换。

一、十进制整数转N进制

1.十进制转二进制

除2取余法:连续除以2,直到商为0,逆序排列余数。

例如十进制数57转为二进制数:

序号

被除数

余数

备注

1

57

28

1

57除以2得28余1

2

28

14

0

28除以2得14余0

3

14

7

0

14除以2得7余0

4

7

3

1

7除以2得3余1

5

3

1

1

3除以2得1余1

6

1

2

1

1除以2得0余1(商为0,结束)

逆序排列余数(从下往上)得到二进制数:111001B。

注意除2取余每次都是用上次的商作为被除数,即:取商除2取余。

2.十进制转二进制

十进制转N进制与转二进制算法如出一辙,即除n取余法。

比如把十进制数107转换成八进制:

107除以8等于13,余数是3;

13除以8等于1,余数是5;

1除以8等于0,余数是1。

把这些余数倒序排列,就是153,这就是十进制数107的八进制表示。

二、N进制整数转十进制数

1.二进制转十进制

按位权展开:各位数字乘以位权的和。

这是因为现行的计数方法都是采用“位值法(Positional Value Algorithm)”,它的特点是各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关。位置所代表的权重称为位权,简称权。

看似很高大上,但其实这种表示方法我们非常熟悉,比如:9527=9*1000+5*100+2*10+7。

上面算式中的1000、100、10、1就是位权,因此我们可以得到一个公式:数=∑数字*位权。

1000、100、10、1分别对应10^3、10^2、10^1、10^0,这下你看出门道没?底数代表进制,指数代表位置(从个位起向左依次为0、1、2、……)。

那么,你自然能联想到,二进制位权的底数就应该是2。

如二进制数111001.000B数字与位权的对应关系:

按位权展开求和即可得到对应的十进制数:

其实,本质上来说,位值法的位权表示的是倍数关系:每一位都是后一位的N倍。N就是指N进制,十进制就表示每一位是后一位的10倍,二进制就表示每一位是后一位的2倍。这其实就是位权展开法的原理。

2.N进制转十进制

其他进制数转十进制数同理,八进制数的位权是以8为底的幂,十六进制数的位权是以16为底的幂。位权的底数部分被称为“基数”,二进制的基数是2,十进制的基数是10,八进进制的基数是8,十六进制的基数是16。

比如8进制数字153,按位权展开求和为:

三、进制快捷转换

因2的3次方是8,所以二进制转为八进制时,可3个一组进行转换,每组内位权的指数编号重新从零开始计算。如111001B转为八进制数:

同理,由于2的4次方是16,二进制转十六进制时,可4个一组进行转换(优先满足右侧分组,因为最高位可以补零)​,如111001B转为十六进制数:

四、十进制小数转二进制数

与整数“除2取余法”的门道儿正相反,采用“乘2取整法”。

乘2取整法:用2乘十进制小数,将积的整数部分取出,再用2乘余下的小数部分,如此循环,将每步取出的整数部分顺序排列,即为小数的二进制。

例如,十进制数32.12转为二进制数:

整数部分32用除2取余得到二进制数为100000。

小数部分为0.12,用乘2取整法:

序号

乘2

取整

备注

1

0.12×2=0.24

0

2

0.24×2=0.48

0

3

0.48×2=0.96

0

4

0.96×2=1.92

1

取整后,后续运算因数变为1.92-1=0.92

5

0.92×2=1.84

1

取整后,后续运算因数变为1.84-1=0.84

6

0.84×2=1.68

1

取整后,后续运算因数变为1.68-1=0.68

7

注意乘2取整每次都是用上次积的小数部分作为乘数,即:取小乘2取整。

与整数不同的是,乘2取整可能会无限运算下去,需按题目精度要求截取足够位数。​

顺序排列(从上到下)取出整数,得到小数部分的二进制数为.000111。

故最终求得二进制小数:100000.000111。

总结:整数部分,除2取余、逆序排列;小数部分,乘2取整、顺序排列。


http://www.kler.cn/a/461046.html

相关文章:

  • Python 链接 Pcomm
  • 黑马JavaWeb开发跟学(十四).SpringBootWeb原理
  • C# 服务调用RFC函数获取物料信息,并输出生成Excel文件
  • C# _ 数字分隔符的使用
  • 代码随想录算法训练营第五十二天|KM101.孤岛的总面积|KM102.沉没孤岛|KM103.水流问题|KM104.建造最大岛屿
  • 【Matlab算法】基于改进人工势场法的移动机器人路径规划研究(附MATLAB完整代码)
  • 软考高项(二十)高级项目管理 ★重点集萃★
  • 宽带、光猫、路由器、WiFi、光纤之间的关系
  • IDEA工程maven reimport无效
  • 海外盲盒系统开发,助力企业全球化发展
  • 进程处理题目
  • C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡
  • 汇编基础DOSBox的使用
  • MATLAB关于集合的运算(部分)
  • MyBatisPlus完整技术汇总一
  • Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案
  • 通过交叉实现数据触底分页效果new IntersectionObserver()(html、react、vue2、vue3)中使用
  • 【二】arcgis JavaScript api 实现加载不同坐标系的底图和三维服务
  • 工作中常用Vim的命令
  • MiFlash 线刷工具下载合集
  • 查看 GitHub 仓库的创建时间
  • Excel for Finance 06 `STOCKHISTORY` 函数
  • Vue.js前端框架教程15:Vue父子组件之间的通信ref、emits
  • HarmonyOS NEXT应用开发之工具安装
  • 初次使用Oracle存储过程,定时任务--记录
  • 产品经理2025年展望