进制转换
?前言
?哈喽,大家好,我是Aaron。
本文将带来各进制之间的转换规则,但在了解之前需要知道~
八进制和十六进制之间是没有直接的转换方式的,只能通关转换为其他进制形式,再通过其他形式转换。
比如说八进制数字,只能将其转换为二进制数字或者十进制数字之后,再由转换为的二进制数字或十进制数字转换为十六进制得到。
?下面正文开始。

?各进制表示方式
例如:
这四个进制表示的是同一个数字10,不同进制只是其表现形式不同而已~
为了加以区分,就产生了不同的标识来确定其表示形式。
?各个进制的字母表示
在有些场景并不会告诉我们某一个数字表示的是几进制,但会在其数字中加上对应的字母加以区分,首先我们先认识以下不同进制对应的字母。
数字可以通过其简写字母来加以区分,比如011010B表示二进制,352O表示八进制,31D表示十进制,32H表示十六进制。
注意: 什么都不加的情况默认是十进制数字~
❤️各个进制的前缀表示
进制的前缀表示是我们比较常见与熟知的,下面一一介绍~
- 二进制前缀 – 0b
- 八进制前缀 – 0
- 十进制前缀 – 无
- 十六进制前缀 – 0x(大小写都可以)
如0b表示二进制,027表示八进制,91表示十进制,0x(0X)39f表示十六进制。
注意: 八进制的前缀是数字0,而不是字母O,十六进制前缀是数字0加上字母X,不是字母Ox。
不论是前缀还是后缀,都可以唯一标识其进制形式~博主这里汇总了一张表格,希望可以提供帮助 ~
| 进制 | 英文 | 范围 | 前缀 | 后缀 |
|---|---|---|---|---|
| 二进制 | Binary | 0~1 | 0b | B |
| 八进制 | Octal | 0~7 | 0 | O |
| 十进制 | Decimal | 0~9 | \ | D |
| 十六进制 | Hexadecimal | 0~9,a ~ f | 0x | H |
?二进制与八进制的相互转换
二进制和八进制之间是可以相互转换的~
接下来我们分开讨论~
?二进制转换为八进制
以小数点为分界,整数部分从最低位开始每3个二进制数字为一组,高位不够在更高位补0,小数部分从最高位开始每3个二进制数字为一组,低位不够在更低位补0。
文字描述不够形象,我们举例来说:
比如一个二进制数字:
0.01001
将其按上述规则分组:
01 101 010 101.010 01
可以看到整数和小数部分都有不够3个的情况,则补0:
001 101 010 101.010 010
之后按其权重计算:
001 101 010 101.010 010 1 5 2 5 . 2 2
所以该二进制数字转换为八进制为:1525.22
使用进制转换器进行验证:

?八进制转换为二进制
举例:
比如八进制数字357.146要转换成二进制数字,则把八进制数字的每一个位单独来看。
3 5 7.1 4 6
将其每一位都按其对应的权重转换位二进制。
3 5 7 . 1 4 6 011 101 111.001 100 110
所以八进制数357.146转换为二进制的结果是.00
用进制转换器验证:

?二进制与十进制的相互转换
二进制和十进制之间的相互转换是最常见,也是我们必须要掌握的~
下面就对其进行介绍~
?二进制转换为十进制
我们知道进制转换成不同的进制时,每一位就会拥有不同的权重,而二进制就拥有2的权重。
如二进制数字101.11,其每一位对应的权重就是10的N次方。
注意: 小数部分的权重是
1 0 1 . 1 1 2^2 2^1 2^0.2^-1 2^-2
只需要将其二进制每一位乘以他的权重即可求出其值~
所以最后二进制数101.11转换为十进制数的结果为5.75
用进制转换器验证:

?十进制转换为二进制
十进制数转换为二进制较为复杂,需要拆分为两个步骤完成:
- 整数部分
- 小数部分
下面举一个实例演示。
比如要将十进制数字125.25转换为二进制数字。
首先转换整数部分,这里用画图的方式演示:

所以最后得到的整数结果为:1111101
接下来转换小数部分,同样通过画图形式:

所以最终小数部分结果为0.01
所以十进制数字125.25最终转换为二进制为:.01。
进制转换器验证:

?二进制与十六进制的相互转换
二进制与十六进制的相互转换与上文讲过的二进制与八进制之间的相互转换十分类似,接下来我们看~?
?二进制转换为十六进制
二进制转换为十六进制的形式和二进制转换为八进制非常类似,方法为:以小数点为分界,整数部分从最低位开始每4个二进制数字为一组,高位不够在更高位补0,小数部分从最高位开始每4个二进制数字为一组,低位不够在更低位补0。?
比如给出二进制数字.001001,要求转换为十六进制数字。
按要求分组:
1 0110 1100.0010 01
不够位数补0:
0001 0110 1100.0010 0100
按组分别转换:
0001 0110 1100.0010 0100 1 6 c . 2 4
所以二进制数字.001001转换为十六进制为16c.24
用进制转换器验证:

?十六进制转换为二进制
例如将十六进制数5cf.3转换为二进制。
首先将十六进制数每一位拆开来看:
5 c f.3
然后将每一位对应的十六进制数字转换为二进制:
5 c f . 3 0101 1100 1111.0011
转换的结果为0.0011
所以最后十六进制数字5cf.a3转换为二进制数的结果是:.0011
进制转换器验证:

?八进制与十进制的相互转换
*八进制与十进制之间的相互转换也是较为常见的一种,其转换和上文讲过的二进制与十进制的相互转换有异曲同工之处,接下来我们看看具体是怎么转换的~*?
?八进制转换为十进制
与二进制类似的,八进制每一位都拥有8n的权重,首先要将所有的权重标出,然后用每一位的值乘以其对应权重,左后求和即可得出结果~
例如将八进制数字54.42转换为十进制数字。
首先标出每一位所对应权重:
5 4 . 4 2 8^1 8^0.8^-1 8^-2
再将每一位乘以其对应权重求和:
- 整数部分:5✖8+4✖1
- 小数部分:4✖1/8+2✖1/64
最终结果为:44.53125
进制转换器验证:

?十进制转换为八进制
十进制转换为其他进制的方式是我们必须要掌握的~
十进制转换为八进制的方式和十进制转换为二进制类似,需要分为两部分:
- 整数部分
- 小数部分
其中整数部分的转换采用的方法是:将要转换的数字除以8,得到的余数作为最低位,再用除法得到的商作为被除数除以8,得到的余数最为次低位,以此类推,直到商为0为止。
而小数部分采用的转换方式是将小数部分乘以8,得到的积的整数部分作为二进制小数位的最高位,再将积的小数部分乘以8,得到的积的整数位作为二进制小数位的次高位,以此类推,直到积的小数部分为0为止。
光看文字不一定能够理解,举一个例子:
将十进制数132.5转换为八进制。
首先转换整数部分:
用画图的形式展示:

所以整数部分结果为204
接下来转换小数部分:
同样通过画图的方式展示:

所以小数部分的结果是4
最后,将整数部分与小数部分凭借,所以十进制数132.5转换为八进制的结果是204.4。
八进制与十六进制之间不能直接转换,需要通过转换为二进制或者十进制最后中间跳板,再完成转换
?十进制与十六进制的相互转换
其实本文看到这里就可以发现一定的规律,只要是涉及十进制的转换,都会涉及权重,看完本文后大家也可以自己通过特殊的理解总结~
?接下来分开讲解这两种进制之间的相互转换~
?十进制转换为十六进制
- 整数部分
- 小数部分
其中整数部分的转换采用的方法是:将要转换的数字除以16,得到的余数作为最低位,再用除法得到的商作为被除数除以16,得到的余数最为次低位,以此类推,直到商为0为止。
而小数部分采用的转换方式是将小数部分乘以16,得到的积的整数部分作为二进制小数位的最高位,再将积的小数部分乘以16,得到的积的整数位作为二进制小数位的次高位,以此类推,直到积的小数部分为0为止。
例如将十进制数32.25转换为十六进制
整数部分:
画图演示:

所以整数部分的结果是20
小数部分:
画图演示:

所以小数部分的结果是4
最后将整数部分和小数部分拼接
所以十进制数32.25转换为十六进制结果为:20.4
进制转换器验证:

?十六进制转换为十进制
与二进制转换为十进制和八进制转换为十进制类似,十六进制数的每一位也拥有自己的权重,只需要将每一位的权重标出,用十六进制数的每一位乘以其对应权重,最后相加即可。
例如要求将十六进制数4f.2转换为十进制。
首先,标出十六进制数的每一位权重:
4 f . 2 16^1 16^0.16^-1
将其对应相乘相加:
- 整数部分:4✖16+15✖1
- 小数部分:2✖1/16
所以,十六进制数4f.2转换为十进制的结果为79.125
进制转换器验证:

?总结
?以上就是本文的全部内容,其实其规则是很好理解的,并且其中也有很多规律,不如二进制/八进制/十六进制之间的转换都是将其分组依次转换;而涉及十进制之间的转换无非是权重问题和整数/小数区分转换的问题,只要认真总结,多举几个例子练习即可掌握,希望本文对大家能够起到帮助~
?最后,如果各位喜欢本文,不妨留下你的三连支持~
?点赞? + ?关注? + ✔️收藏✔️
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208450.html原文链接:https://javaforall.net
