各进制转换的详细讲解
一:准备工作
1.进位制
维基百科:
进位制是一种记数方式,亦称进位计数法或位值计数法。利用这种记数法,可以使用有限种数字符号来表示所有的数值。一种进位制中可以使用的数字符号的数目称为这种进位制的基数或底数。若一个进位制的基数为n,即可称之为n进位制,简称n进制。现在最常用的进位制是十进制,这种进位制通常使用10个阿拉伯数字(即0-9)进行记数。
2.进位
任何进制,都有进位的说法(以位数增加即数量增加来弥补种类的不足),二进制的满2进一,十进制的满10进一等等,就比如对于二进制01后一位不是02,因为只有0和1两种符号,所以进位变成10,同样,八进制的57 后面不是58而是60。
3.拆位
任意一个数N可用下式表示:
N=(dn-1dn-2…d1d0.d-1d-2…d-m)r
=dn-1rn-1dn-2rn-2…d1r1d0r0d-1r-1d-2r-2…d-mr-m
(其中r为基数,n、m为正整数)
例1:r=10的数321
十进制的321代入公式为
d2d1d0 = d2x r2 + d1x r1 + d0x r0
即:321 = 300+20+1 = 3x100+2x10+1 = 3x102 + 2x101 + 1x100
例2:r=2(10)的数1010(此处的2为十进制)
二进制的1010代入公式为
d3d2d1d0 =d3x r3+ d2x r2 + d1x r1 + d0x r0
1010 =1x103 + 0x102 + 1x101 +0x100 =1x10(2)3 + 1x10(2)1
=1x2(10)3 + 1x2(10)1
八进制:52=5x10(8)+2
十六进制:FF=Fx10(16)+F
4.说明
文章下面,二进制用10101(2),八进制用32(8),十进数用57(10) ,十六进制 用FF(16) 等下标分别代替,R进制为任意进制的意思。(建议:可查看右侧的目录)
二:进制转换方法
①:按“权”展开法(适用范围:R进制→十进制)
②:减权定位法(适用范围:十进制→R进制)
③:按基数重复相乘(除)法(适用范围:R进制→十进制)
④:重复相除(乘)法(适用范围:十进制→R进制)
⑤:分组法(适用范围:二进制⇄八,十六进制)
⑥:间接法
总结:上述方法中,①②互为逆运算,③④互为逆运算,⑤用于M进制和Mn 进制的转换(其中m,n为正整数),其他用⑥。
如果以十进制为中心的话,可分为三类:
1.十⇄R: ①②③④
2.M⇄Mn : ⑤
3.其他: ⑥
如下图所示
注:①②③④方法其实可用于R进制与R进制的转换,但人类只熟悉于十进制的四则运算,所以主要就用于十进制和R进制的相互转换。
三:方法详解
1.方法①:按“权”展开法
(1)二进制→ 十进制
先以0100 1110(2) → 78(10)为例
①:01001110 (2) = 1 x 26 + 1 x 23 + 1 x 22 + 1 x 21 = 78
上面即为按“权”展开法的使用过程,具体可以拆分为三个步骤,1:拆位,2:转换, 3:运算。
第一步:拆位
01001110(2) = 1(2)x106(2) + 1(2)x103(2) + 1(2)x102(2) + 1(2)x101(2)
第二步:分别转换
二进制 | 十进制 |
---|---|
0000 0000 | 0 |
0000 0001 | 1 |
0000 0010 | 2 |
第三步:运算
1(10) x26 (10) + 1(10) x23(10) + 1(10) x22(10) + 1(10) x21(10) = 64(10) +8(10)
+4(10) +2(10) =78(10)
(2)八进制→ 十进制
例2:62(8) → 50(10)
第一步:拆位
62(8)= 6(8)x10(8)+ 2(8)
第二步:转换
八进制 | 十进制 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
10 | 8 |
第三步:运算
6(10) x8(10)+ 2(10)= 48(10) +2(10) =50(10)
即,①:62(8) = 6 x 81 + 2 x 80 = 50
(3)十六进制→ 十进制
例3:FF(16) → 255(10)
第一步:拆位
FF(16)=F(16)x10(16) +F(16)
第二步:转换
十六进制 | 十进制 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
A | 10 |
B | 11 |
C | 12 |
D | 13 |
E | 14 |
F | 15 |
10 | 16 |
第三步:运算
15(10)x16(10) +15(10) = 240 (10)+ 15(10) = 255(10)
即,①:FF(16) = 15 x 161 + 15 x 160 = 255
可以从上面得出,所谓的按权展开法,就是把多位数拆分,然后对照转换表一一转换,然后再组合起来,这里说一下什么是“位权”,即“权”,位权,是指数制中每一固定位置对应的单位值。(百度百科的解释),所以在进行第二步:转换的时候,对于任意进制R,表中10所对应的值,变为十进制都是R,比如:十六进制的10 (16)= 16(10) ,八进制的10 (8)= 8(10) 所以只需要记忆个位数所对应的数字或者字母(十进制以上)。
2.方法②:减权定位法
如下图
其实就是方法①的逆运算
比如上面出现的例子:
①:01001110 (2) = 1 x 26 + 1 x 23 + 1 x 22 + 1 x 21 = 78
移项:
1 x 23 + 1 x 22 + 1 x 21 = 78 - 1 x 26
1 x 22 + 1 x 21 = 78 - 1 x 26 -1 x 23
1 x 21 = 78 - 1 x 26 -1 x 23 -1 x 22
0 = 78 - 1 x 26 -1 x 23 - 1 x 22 - 1 x 21
3.方法③:按基数重复相乘(除)法
(1)二进制→ 十进制
例1:101001(2) = (((( 1 x 2 + 0 )x 2 + 1 )x 2 + 0 )x 2 + 0 ) x 2 + 1 = 41
这样可能不好理解,从左往右依次变为二进制数看看:
101001(2)变为(下面的10均为二进制数):
1 = 1
10 = (1 x 10 + 0 )
101 = ((1 x 10 +0 )x 10 + 1 )
1010 = ( ((1 x 10 + 0 )x 10 + 1 ) x 10 +0 )
10100 = ( ( ((1 x 10 + 0 )x 10 + 1 ) x 10 +0 ) x 10 + 0 )
101001 = ( ( ((1 x 10 + 0 )x 10 + 1 ) x 10 +0 ) x 10 + 0 ) x 10 + 1
然后再全部转为十进制数,就变成了例1的形式。
又或者可以这样理解。
就比如十进制数321有两种拆分形式
第一种:321 = 3 x100 + 2 x 10 + 1(按权拆分)
把第一种提公因式就变为第二种
第二种:321 = ( 3 x 10 + 2) x 10 + 1
即把方法①提公因式,就能得到方法③
(2)八进制→ 十进制
例2:622(8)→ 402(10)
方法① :622(8) = 6 x 82 + 2 x 8 1 + 2 x 80 = 402
方法③ :622(8) = ( 6 x 8 + 2 ) x8 +2 = 402
(3)十六进制→ 十进制
例3:DEF(16)→ 3567(10)
方法① :DEF(16) = 13 x 162 + 14 x 16 1 + 15 x 160 = 3567
方法③ :DEF(16) = ( 13 x 16 + 14 ) x16 +15 = 3567
注:方法③和④ 括号里面的除和乘均是针对小数,这里就不过多阐述。
4.方法④:重复相除(乘)法
(1)十进制 → 二进制
例1:78(10) → 0100 1110(2)
如下图
即 78(10) = 100 1110(2)
上图可等同于
把右侧从 78 = 39 x 2 + 0 一直合并到1 = 2 x 0 + 1,变为
78 = 39 x 2 + 0
78 = ( 19 x 2 + 1 ) x 2 + 0
78 = ( ( 9 x 2 + 1 ) x 2 + 1 ) x 2 + 0
78 = ( ( ( 4 x 2 + 1 ) x 2 + 1 ) x 2 + 1 ) x 2 + 0
78 = ( ( ( ( 2 x 2 + 0 ) x 2 + 1 ) x 2 + 1 ) x 2 + 1 ) x 2 + 0
78 = ( ( ( ( ( 1 x 2 + 0 ) x 2 + 0 ) x 2 + 1 ) x 2 + 1 ) x 2 + 1 ) x 2 + 0
78 = ( ( ( ( ( ( 0 x 2 + 1 ) x 2 + 0 ) x 2 + 0 ) x 2 + 1 ) x 2 + 1 ) x 2 + 1 ) x 2 + 0 =1001110
从左边到右边就是方法③,所以方法④为方法③的逆运算
(2)十进制 → 八进制
即796(10) = 1434(8)
(3)十进制 → 十六进制
即796(10) = 31C(16)
5.方法⑤:分组法
(1)二进制→八进制
例:11010111(2) → 327(8)
进制表:
二进制 | 八进制 |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
以三位为一组(不够三位则补零)
即 11010111(2) → 327(8)
(2)二进制→十六进制
例:11010111(2) → D7(16)
进制表:
二进制 | 十六进制 |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0 110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
以四位为一组(不够四位则补零)
即 11010111(2) → D7(16)
(3)八进制→二进制
例:327(8)→ 11010111(2)
进制表:
二进制 | 八进制 |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
即 327(8) → 11010111(2)
(4)十六进制→二进制
例: D7(16) → 11010111(2)
进制表:
二进制 | 十六进制 |
---|---|
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0 110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | B |
1100 | C |
1101 | D |
1110 | E |
1111 | F |
即 D7(16) → 11010111(2)
6.方法⑥:间接法
比如:八进制转为十六进制
可以先让八进制转为二进制或者十进制,再转十六进制。反过来,对于十六进制转八进制,也类似。
例题略
四:参考资料
1.https://www.cnblogs.com/gaizai/p/4233780.html#_labelConvert31
2.计算机组成原理(唐朔飞第二版附录6A)
各进制转换的详细讲解相关推荐
- 利用10位AD转换器 及 LED 数码管,实现由AD转换器采集温度,并用数码管显示。温度超出一定范围,LED 指示灯闪烁报警。(主要分析进制16进制转换10进制,并用数码管显示问题)
** 题目: ** 利用原有的电路 AD 及 LED 数码管显示等例子,进行整合.实现由 AD转换器采集温度(用可调电阻模拟),温度在数码管上显示.当温度超出一定范围,用 LED 指示灯进行闪烁报警. ...
- java语言编写进制转换_Java 3种方法实现进制转换
由其他进制转换为十进制比较简单,下面着重谈一谈十进制如何化为其他进制. 1.使用Java带有的方法Integer,最简单粗暴了,代码如下 //使用java提供的方法 //但仅局限于比较常用的二进制.八 ...
- 进制转换(非常详细+算法代码)
--快开学了,进制转换忘了怎么办? --没事,看这篇博客保你信手拈来 ! --学不会呢? --****我!! 废话不多说,我们进入正题 : 常用的进制范围和其符号修饰: 二进制(B)---->0 ...
- 进制转换(二进制、八进制、十进制、十六进制)超详细版
今天来总结一下各种进制转换问题,详细齐全易于理解,希望对你有帮助哦! 各种进制之间的相互转换 先从我们最熟悉的十进制入手吧,其他进制与十进制的转换方法都是一样的. 整型有4种进制形式: 1.十进制: ...
- 【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
目录 1.进制转换必备知识: 1.1 二进制逢2进1 8进制逢8进1 10进制逢10进1 16进制逢16进1 1.2为了区分二.八.十.十六进制,我们 ...
- 超详细进制转换(二进制、八进制、十进制、十六进制)详解
目录 在学习四种进制转换之前先了解一下自种进制的特点 一.整数转换 1.十进制转R进制 2.R进制转十进制 3.二进制转八进制.十六进制 4.八进制转二进制 二.小数转换 1.十进制转R进制 2.R进 ...
- mysql bin oct_python 讲解进制转换 int、bin、oct、hex
相关免费学习推荐:python视频教程 原理 十进制转n进制都可以使用倒除法:对十进制进行除n的运算,直到商为0为止,然后将各个步骤中得到的余数倒着写出来. n进制转十进制:(例子:二进制转十进制) ...
- 最清晰的进制转换讲解 - java实现
子曰:知之为不知,不知为不知,太菜也! 进制转换在平时的算法练习题或者项目中都会遇到,下面我们来看一下使用java如何进行进制互相转换. 文章目录 1. 使用内置函数进行进制转换 十进制转换其他进制 ...
- 进制转换(二进制,八进制,十进制,十六进制)涵盖整数与小数部分,内容的图片全为手写【详细图解】
各种进制之间的相互转换 1. 各进制表示数 1.1 数码 1.2 基数 1.3 位权 2. 十进制转换为其他进制 2.1 整数部分 2.2 小数部分 3. 其他进制转换为十进制 4. 二进制转换为八进 ...
最新文章
- sql三表连接查询 - 使用sqlite 演示
- 【信息抽取】如何使用BERT进行关系抽取
- WCF添加服务失败。服务元数据可能无法访问。请确保服务正在运行并且正在公开元数据。...
- window10 mysql5.7 解压版 安装
- git github配置
- Oracle Hint
- oracle 地市 区县分组,oracle分组写法 - 挣扎在陌生城市ITMAN的个人空间 - OSCHINA - 中文开源技术交流社区...
- SQL:postgresql查询结果加一个自定义的列
- python canvas画移动物体_HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动
- java程序设计精编教程第3版电子版课后答案_Java程序设计精编教程-(第3版)-微课版...
- java执行Sql脚本
- 规划资源管理常用表格
- petalinux 设备树驱动GPIOLED
- 对比企业邮箱,使用企业邮箱有哪些好处?
- Linux头文件 C/C++头文件
- 分享一个漂亮的后台 admin 前端模板
- Codeforces Round #828B CF1744B Even-Odd Increments
- excel每页都显示标题的方法
- RevitAPI: 如何判断天花板的族类型是否是复合结构
- python翻页爬豆瓣影评_Python超级简单的爬虫案例--爬豆瓣影评为例
热门文章
- 美团、饿了么外卖红包天天免费领,吃饭省钱杠杠滴!
- 微信小程序 开发 微信开发者工具 快捷键
- springboot 2.1 整合 rabbitmq 踩坑 砰砰砰
- linux内核缓冲区的管理,Linux内核Slab内存缓冲区管理器
- 餐饮小程序服务器配置,餐饮小程序应该怎么做?
- 中国移动联合ATT正式启动ONAP国际开源社区
- 为何不能暂停AI研发?丨杨立昆吴恩达对话实录
- JS调用浏览器打印功能
- iOS开发10-iOS SandBox(沙盒或沙盘)介绍、路径获取
- 单线程照样飞起 | redis字典快速映射+hash釜底抽薪+渐进式rehash