进制之间的转换
二进制
计算机的信息都是以二进制数存储的。计算机内部一律采用二进制的原因:
- 电压只有两个状态:高和低;用数字表示就是 1 和 0。
- 二进制的逻辑运算简单。逻辑只有 “0” 和 “1”,即真和假。
- 二进制的运算法则简单。
数制有六十进制、十六进制、十进制、八进制、二进制等。平常用得最多的是十进制,计算机内部使用的是二进制,编程还要用到八进制和十六进制。
基数与位权
基数就是进制中能表示数字的符号的个数。十进制有 0~9 共是个数字符号,所以基数是 10。二进制的基数是 2。某种进制允许使用的数字符号有多少个,其基数就是多少。
![](https://img2020.cnblogs.com/blog/2271881/202201/2271881-20220112002500408-1394653532.png)
位权就是以基数为底,以数字所在的序号为指数的整数幂。十进制 12 的基数是 10,从右到左(个位到十位)的数字符号的序号依次是 0 和 1。那么,数字符号 2 的位权是 100;数字 1 的位权是 101。
十进制 12 又可以这样表示:1×101+2×100=12。
二进制 1.1:
十进制 886.88:
R进制转为十进制
R 进制转换为十进制要按位权展开求和。
(1)二进制数 1001 转换为十进制数
(2)八进制数 35 转换为十进制数
(3)十六进制数 32CF 转换为十进制数
十进制转为R进制
整数转换
十进制整数化为 R 进制数:除 R 取余。
(1)把 237.8125 转换为二进制数。
![](https://img2020.cnblogs.com/blog/2271881/202201/2271881-20220113005632313-1288574202.png)
从低往上依次填写的余数就是二进制的整数部分得到 11101101。
(2)把 58506.8125 转换为八进制数。
![](https://img2020.cnblogs.com/blog/2271881/202201/2271881-20220113005443855-573062096.png)
从低往上依次填写的余数就是八进制的整数部分得到 162212。
小数转换
十进制纯小数化为 R 进制数:乘 R 取整法,得 R 进制纯小数。
(1)把 0.8125 转换为二进制数。
\(0.8125×2=1.625\) …… 整数部分为 1
\(0.625×2=1.25\) …… 整数部分为 1
\(0.25×2=0.5\) …… 整数部分为 0
\(0.5×2=1\) …… 整数部分为 1
从高往下依次填写的整数就是二进制的小数部分得到 0.1101。
(2)把 0.8125 转换为八进制数。
从高往下依次填写的整数就是二进制的小数部分得到 0.64。
二进制转八进制
二进制的基数是 2,八进制的基数是 8,由于 8 是 2 的整数次幂,即\(8=2^3\),所以一位八进制数正好相当于3位二进制数。以小数点为界限,分别向左、向右每3位一组划分,最后剩下的位数不够3位时用0补齐,再进行转换。
将二进制数 111111011.0100001 转换为八进制数,首先以小数点为界限,以3位数为一组进行划分:
![](https://img2020.cnblogs.com/blog/2271881/202201/2271881-20220114212022531-649096426.png)
整数部分001
原本是1
,由于是最后剩下的,所以用0补齐;小数部分100
原本也是1
,且也是最后剩下的,所以用0补齐。
将每组对于的八进制数写出来:
![](https://img2020.cnblogs.com/blog/2271881/202201/2271881-20220114212419505-1737934287.png)
所以最后的结果是:1111111011.0100001=1773.204。
八进制转二进制
八进制转换为二进制就非常的简单了,只需要把八进制的每一位数字转换成3位二进制数即可,注意,如果二进制只有两位或者两位以下时,用0补齐这组数的最前面即可。
将八进制数 72.531 转换为二进制数:
![](https://img2020.cnblogs.com/blog/2271881/202201/2271881-20220114213020985-1132796950.png)
所以最后的结果是:\(72.531=111010.101011001\)
二进制转十六进制
二进制的基数是 2,十六进制的基数是 16,由于 16 是 2 的整数次幂,即\(16=2^4\),所以一位十六进制数正好相当于4位二进制数。以小数点为界限,分别向左、向右每4位一组划分,最后剩下的位数不够4位时用0补齐,再进行转换。
将 111101010011.10111 转换为十六进制数,首先以小数点为界限,以4位数为一组划分,再依次对其进行转换:
![](https://img2020.cnblogs.com/blog/2271881/202201/2271881-20220114213511504-1840696802.png)
所以,最终结果为\(111101010011.10111=F53.B8\)。
十六进制转二进制
十六进制转换为二进制,直接将十六进制的每一位数字对应的二进制数写出来即可:
![](https://img2020.cnblogs.com/blog/2271881/202201/2271881-20220114213744650-1036196457.png)
所以,最终结果为\(F53.B8=111101010011.10111\)。
八进制与十六进制互转
八进制与十六进制之间的转换,最简单的方法就是借助于二进制来实现,先将八进制转换为二进制,然后二进制再转换为十六进制。同样的,十六进制转换为八进制也是借助于二进制实现。
进制对照表
二进制 | 八进制 | 十进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
10 | 2 | 2 | 2 |
11 | 3 | 3 | 3 |
100 | 4 | 4 | 4 |
101 | 5 | 5 | 5 |
110 | 6 | 6 | 6 |
111 | 7 | 7 | 7 |
1000 | 10 | 8 | 8 |
1001 | 11 | 9 | 9 |
1010 | 12 | 10 | A |
1011 | 13 | 11 | B |
1100 | 14 | 12 | C |
1101 | 15 | 13 | D |
1110 | 16 | 14 | E |
1111 | 17 | 15 | F |