进制转换是指将一个数从一种进位计数制(简称进制)表示为另一种进制的过程。常见的进制包括二进制(Base-2)、八进制(Base-8)、十进制(Base-10)和十六进制(Base-16)。不同进制的转换在计算机科学、数学和数字电子学等领域中非常重要。
进制转换的作用
- 数据表示:计算机内部使用二进制进行运算,而人类习惯于使用十进制。为了便于人机交互,需要在二进制和十进制之间进行转换。
- 简化计算:某些情况下,使用非十进制可以简化计算过程。例如,在计算机系统中,十六进制常用来表示内存地址或颜色代码,因为它们比对应的二进制表示更紧凑。
- 错误检测:在通信和存储系统中,不同进制的表示可以帮助发现和纠正数据传输中的错误。
- 编程与调试:程序员经常需要将数值在不同的进制间转换,以更好地理解程序的工作原理,尤其是在处理底层硬件时。
1.二进制(Binary):由0和1两个数字组成
2.八进制(Octal):由0-7数字组成,为了区分与其他进制的不同,开头以0开始
3.十进制(Decimal):都是以0-9这9个数字组成的,不能以0开头
4.十六进制(Hexedecimal):由0-9,A-F组成,为了区分与其它数字不同,以0x开头
二进制 八进制 十进制 十六进制
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 10
1011 13 11 11
1100 14 12 12
1101 15 13 13
十进制的转换
十进制转二进制
1.十进制转二进制原理:除以2,反取余数,直到商为0终止
2.具体做法:
将某一个十进制数除以2得到的整数部分保留,作为第二次数以2的被除数,得到的余数依次记下,重复上述步骤,直到整数部分为0就结束,将所有得到的余数最终逆序过来,则为该十进制对应的二进制数
例如:
9(十进制)-->1001(二进制)
9/2=4----1
4/2=2----0
2/2=1----0
1/2=0----1
十进制转8进制;
1.原理:除以8,反向取余数,直到商为0终止
2.和2进制差不多
例如十进制866转换为八进制数:
将866除以8得到第一个余数为2,将除以8得到的整数部分108作为第二个被除数,重复操作
直到最终整数部分为0就结束,将所取得的余数逆序输出
866/8=108----2
108/8=13-----4
13/8=1-------5
1/8=0--------1
结果为:1542
十进制转十六进制
1.转换原理:除以16,反向去余数,直到商为0为止
2.具体方法和十进制转二进制,十进制转8进制差不多
例如十进制852转换为十六进制
将852除以16得到第一个余数为4,将除以16得到的整数部分53作为第二个被除数,重复操作
直到最终整数部分为0就结束,将所取得的余数逆序输出
852/16=53-----4
53/16=3-------5
3/16=0--------3
结果为:354
小数部分转换:
1.十进制转二进制
原理:十进制转成二进制小数采用乘2取整,顺序输出
例如0.74D=____B(精确到4位小数)
0.74*2=1.48----->1
0.48*2=0.96----->0
0.96*2=1.92----->1
0.92*2=1.84----->1
0.84*2=1.68----->1
结果为:0.1011 //精确到4位小数字
2.十进制转八进制:
十进制小数转八进制就是乘8取整,顺序输出
方法和思路跟转二进制一样:
例如:11.22D=___Q(精确到小数点后3位)
因为这里有整数部分还有小数部分,所以我们需要先用除以8的方式来转换整数部分
然后用乘以8来转化小数部分
整数部分:
11/8=1---3
1/8=0----1
小数部分:
0.22*8=1.76---->1
0.76*8=6.08---->6
0.08*8=0.64---->0
0.64*8=5.12---->5
结果为:13.160 //精确到小数点3位
3.十进制转十六进制
原理:十进制小数转换成十六进制小数采用乘16取整,顺序输出
思路和方法上同
例如:33.56D__H(精确到小数点后4位)
整数部分除以16,然后小数部分乘以16
整数部分:
33/16=2-----1
2/16=0------2
小数部分:
0.56*16=8.96---->8
0.96*16=15.36--->15
0.36*16=5.76----5
0.76*16=12.16---12
十六进制中的10对应a,11对应b,12对应c,13对应d,14对应e 15对应f
所以结果为:21.8f5b 精确到小数点4位
二进制的转换
二进制转十进制:
例如1101转十进制
二进制转十进制
1101
因为有4位,那么就从3,乘,3,2,1,0
1 *2^3+1 *2^2+0 *2^1+1 *2^0=8+4+0+1=13
8 4 0 1
结果为:13
二进制转八进制
1,将二进制数按照从右到左的顺序,每3位一组进行分组,如果左边不足一组,就添加0来补全
然后将找对应
二进制对应:
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
例如:
11001转换为八进制
分组:011 001 //这里补全了一个0
第一组:
0 1 1
0 2 1
第二组:
0 0 1
0 0 1
转换:011对应3,001对应1,所以结果为:31
二进制转十六进制
和二进制转八进制差不多
十六进制和二进制一样,按照从右到左的顺序,每4位为一组,如果左边不足一组,就用0来补全
例如:111011
分组: 0011 1011 //这里补全了两个0
第一组:
0 0 1 1
0 0 2 1
第二组:
1 0 1 1
8 0 2 1
转换:0011对应3,1011对应11
结果为:3c
11对应十六进制的c
八进制的转换
八进制转二进制:
将八进制的每个数字转换为对应的3位二进制数,然后将二进制数拼接起来
例如:77转换为二进制
数字7对应的二进制为:111
1 1 1
4 2 1
所以结果就是111111
八进制转十进制:
例如:八进制的56转换为十进制为:
公式如下:
5*8^1+6*8^0=40+6=46
40 6
结果为:46
八进制转十六进制:
例如:八进制的43转换为十六进制
我们可以先把八进制转换为2进制,然后二进制转换为十六进制
八进制的43转换为二进制
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
4=100
3=011
100011转换为十六进制就行了
分组: 0010 0011
第一组:
0 0 1 0
0 0 2 0
第二组:
0 0 1 1
0 0 2 1
结果为:23,所以43转十六进制就是23
十六进制的转换:
十六进制转二进制
例如:61DF转二进制
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
6=0110 //因为十六进制4位一组,所以补了1个0
1=0001 //因为十六进制4位一组,所以补了3个0
D=13=1101
F=15=1111
结果:0110000111011111
所以十六进制转换为二进制就是110000111011111
十六进制转8进制
我们可以先把十六进制转换为二进制,然后二进制转8进制
例如:89FC转换为二进制
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
8=1000
9=1001
F=15=1111
C=12=1100
二进制为:1000100111111011
分组:001 000 100 111 111 100 //这里最左边补充了2个0
1 0 4 7 7 4
所以十六进制的89FC转换为八进制就是104774
结果为:104774
十六进制转十进制
十六进制转十进制也可以先转二进制然后再转十进制
例如:85CD转十进制
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1
转十六进制先转为二进制
8=1000
5=0101 //这里补全了1个0
C=12=1100
D=13=1101
然后二进制为:1000010111001101
这里可以使用公式,我觉得比较麻烦,使用对应关系比较好
如下图片
结果为:34253