一:进制学习有什么用呢?
- 学习进制转换对于理解计算机的工作原理,学习编程语言,处理数据压缩和加密,网络和通信以及算法和数据结构都非常重要。 通过学习进制转换,我们可以更好地理解和应用这些概念,提高编程的能力和效率
二:进制的前后缀
进制 | 范围 | 前缀符 | 例子 | 后缀符 | 例子 |
---|---|---|---|---|---|
二进制 | 0、1 | 0b、0B | 0b1010、0B111001 | b、B | 1010b、1011B |
八进制 | 0~7 | 0、0O | “ 056”、0O56 | O | 56O |
十进制 | 0~9 | 一般没有,如果想要也可以+、- | 23、+1、-12 | D、d、通常无 | 23D、23d、45 |
十六进制 | 0-9、A-F | 0x、0X | 0x1A2、0X1A | h、H | 1A3h、1AH |
十六进制数值 | 对应的十进制数值 |
---|---|
0~9,A,B,C,D,E,F | 0~15 |
三:进制间的转换
(一):二进制转换成十进制和八进制和十六进制
1. 二进制转换成十进制
- 对一个二进制,我们将二进制数从小数点隔开,整数部分的是从右到左依次对每位数编号(0~正整数),小数部分是从左到右依次对每位数编号(-1~负整数)
二进制:101101.1101
编号:5 4 3 2 1 0 . -1 -2 -3 -4
- 转换成十进制,依次将每一位的二进制数*2的编号次方在依次相加就得到了对应的十进制了
二进制:101101.1101
编号:5 4 3 2 1 0 . -1 -2 -3 -4
转换后的十进制:
--整数部分:
1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0=45
--小数部分:
1*2^-1 + 1*2^-2 + 0*2^-3 + 1*2^-4=0.8125
--整合:
十进制:45.08125
注释:2^5=252^525
注释:1*2=2(*是数学的×,即:乘号)
注释:2/1=2(/是数学的÷,即:除号)
2.二进制转换八进制
- 将二进制从小数点分割开,分成整数部分和小数部分
- 整数部分:从右到左依次取三位,到最后不够三位的直接补0来凑成三位,再依次从将每一个三位右到左编号0 1 2
- 小数部分:从左到右依次取三位,到最后不够三位的直接补0来凑成三位,再依次从将每一个三位右到左编号0 1 2
可以直接简记为:
从小数点隔开,依次向小数点两侧取三位;
不够三位就补0;
再从右到左依次编号0 1 2
二进制:10101101.11
二进制不够位补0后的:0 1 0 1 0 1 1 0 1 . 1 1 0
编号: 2 1 0||2 1 0||2 1 0||. 2 1 0||
- 转换成八进制:将每一个三位取出来,将每三位中的二进制数×2的编号次方依次相加,依次记录每一个三位最后得到的数,再依次书写(别忘记小数点,如果有小数点的话)
取三位的二进制数:
010: 0*2^2 + 1*2^1 + 0*2^0=2
101: 1*2^2 + 0*2^1 + 1*2^0=5
101: 1*2^2 + 0*2^1 + 1*2^0=5
110: 1*2^2 + 1*2^1 + 0*2^0=6
转换后的八进制数:
255.6
3.二进制转换十六进制
- 将二进制从小数点分割开,分成整数部分和小数部分
- 整数部分:从右到左依次取四位,到最后不够四位的直接补0来凑成四位,再依次从将每一个四位右到左编号0 1 2 3
- 小数部分:从左到右依次取四位,到最后不够四位的直接补0来凑成四位,再依次从将每一个四位右到左编号0 1 2 3
可以直接简记为:
从小数点隔开,依次向小数点两侧取四位;
不够三位就补0;
再从右到左依次编号0 1 2 3
二进制:10101101.11
二进制不够位补0后的:1 0 1 0 1 1 0 1 . 1 1 0 0
编号: 3 2 1 0||3 2 1 0||. 3 2 1 0||
- 转成十六进制:将每一个四位取出来,将每四位中的二进制数×2的编号次方依次相加,依次记录每一个四位最后得到的数,再依次书写(别忘记小数点,如果有小数点的话)
二进制不够位补0后的:1 0 1 0 1 1 0 1 . 1 1 0 0
编号: 3 2 1 0||3 2 1 0||. 3 2 1 0||
取四位的二进制数:
1010:1*2^3 + 0*2^2 + 1*2^1 + 0*2^0=10
1101:1*2^3 + 1*2^2 + 0*2^1 + 1*2^0=13
1100:1*2^3 + 1*2^2 + 0*2^1 + 0*2^0=12
十六进制:
AD.C
(二):十进制转换二进制(有转成八和十六进制的)
- 将十进制数分成两个部分,整数部分和小数部分
- 整数部分:将整数重复÷2取余数(只有0或1),直到整数部分被÷到0为止,将所有的余数从始到末记录下来
- 小数部分:将小数部分重复×2,直到小数部分为0,将所有相乘后得到的整数部分依次记录下来
十进制:98.625
--整数部分:98
98/2=49……0 0
49/2=24……1 1
24/2=12……0 0
12/2=6……0 0
6/2=3……0 0
3/2=1……1 1
1/2=0……1 1//整数部分为0了,不用再继续相除了
--小数部分:0.625
0.625*2=1.25 1
//为什么下面是0.25呢?
因为是重复将小数部分*2的,所以取1.25的小数部分:0.25
//后面就不再做解释了
0.25*2=0.5 0
0.5*2=1.0 1//小数部分为0了,不用再继续相乘了
- 转换成二进制:
- 整数部分:所依次记录的十进制余数,余数从右到左(上图是从下到上) 写成二进制的整数从左到右,即:1100010
- 小数部分:所记录的十进制整数,整数从左到右(上图从上到下) 写成二进制从小数左到右,即:101
十进制中:
所记录的余数:0100011
所记录的整数:101
转换成二进制(整合):1100010.101
其实不看我所写的余数从右到左和整数从左到右,直接看代码块(即:黑色块那)会更简洁明了一点
(拓展开的):十进制转换成八进制和十六进制
- 和十进制转换成二进制类似
- 整数部分:二进制/2,八进制/8,十六进制/16,还是取余数(读数方法相同,原理相同)
- 小数部分:转成二进制是*2,转八进制就*8,转十六进制就*16,还是取整数(原理相同)
(三)八进制转换二进制和十进制(十六进制)
1.八进制转换二进制
- 将八进制按位数依次拆开,将每一位都按2的(2,1,0)次方相加来凑数,看是哪个符合
八进制:255.6
2=2^1
5=2^2 + 2^0
5=2^2 + 2^0
6=2^2 + 2^1
- 转换成二进制:所有都以(2 1 0)为标准,看看上述的次方中哪些没有的就在标准下置为0,有的就为1
标准:2 1 0
2: 0 1 0
5: 1 0 1
5: 1 0 1
6: 1 1 0
转换成二进制为:
010101101.110
2.八进制转换十进制
- 将每一位的八进制的数单拎出来,将其对应的十进制数写下来,以小数点隔开依次向两侧编号
- 整数部分:编号 0~正整数;
- 小数部分:编号 -1~负整数
八进制:AB.3
A->10
B->11
3->3
转成十进制数:10 11 . 3
编号: 1 0 . -1
- 转换成十进制,将转成的十进制数×8的编号数再依次相加
转成十进制数:10 11 . 3
编号: 1 0 . -1
--十进制:10*8^1 + 11*8^0 + 3*8^-1=91.378
3.八进制转十六进制
- 搜了网上的没有直接转成十六进制的,是多以先转成二进制再转成十六进制的方法(间接转换)
为什么没有先转成十进制再转成十六进制呢?
个人觉得可能是转成十进制中的如果有小数位可能小数的精确度相关导致的,但如果题目简单也可以,并且转成二进制是三位一合并,且是相乘,用计算机方便计算
(四):十六进制转换二进制和十进制(八进制)
1.十六进制转换二进制
- 将十六进制按位数依次拆开,将每一位都按2的(3,2,1,0)次方相加来凑数,看是哪个符合
十六进制:1A2H//H是十六进制的后缀符号
1=2^0
A->10=2^3+2^1
2=2^1
- 转换成二进制:所有都以(3 2 1 0)为标准,看看上述的次方中哪些没有的就在标准下置为0,有的就为1
标准:3 2 1 0
1: 0 0 0 1
A: 1 0 1 0
2: 0 0 1 0
转换成二进制为:
000110100010
2.十六进制转换十进制
- 将每一位的十六进制的数单拎出来,将其对应的十六进制数写下来,以小数点隔开依次向两侧编号
- 整数部分:编号0~正整数;
- 小数部分:编号 -1~负整数
八进制:1A2H//H是十六进制的后缀符号
1->1
A->10
2->2
转成十进制数:1 10 2
编号: 2 1 0
- 转换成十六进制,将转成的六进制数×16的编号数再依次相加
转成十进制数:1 10 2
编号: 2 1 0
--十进制:1*16^2 + 10*16^1 + 2*16^0=418
3.十六进制转换八进制
- 搜了网上的没有直接转成八进制的,是多以先转成二进制再转成八进制的方法(间接转换)
为什么没有先转成十进制再转成八进制呢?
个人觉得可能是转成十进制中的如果有小数位可能小数的精确度相关导致的,但如果题目简单也可以,并且转成二进制是四位一合并,且是相乘,用计算机方便计算
- 以上就是进制间转换的具体内容