欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二进制、八进制、十进制、十六进制(整数、小数)之间的转换

程序员文章站 2022-07-15 09:57:41
...

二进制、八进制、十进制、十六进制(整数、小数)之间的转换

n表示位数----(整数,从右边是第一位;小数,从左是第一位,即小数点后是第一位)
num表示对应位置的数值
1…8表示1到8中任意数值
!表示阶加,一直加到n为0 ---- 此用法只限本文

一、二进制转八进制 1/0*(n-1)!

1)整数(从右向左三位并一位)
11 110 000011 110 100 (不足三位前面补0,分为三部分计算)
	0110*2^2 + 1*2^1 + 1*2^0 = 3
	1101*2^2 + 1*2^1 + 0*2^0 = 6
	0001*2^2 + 0*2^1 + 0*2^0 = 4
最后得到八进制数(从前往后读):364
2)小数(从左向右三位并一位)
0.1101101*2^2 + 1*2^1 + 0*2^0 = 6
最后得到八进制数:0.6

二、二进制转十进制

1)整数 1/0*(n-1)!
101100101*2^7 + 0*2^6 + 1*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 128 + 32 + 16 + 2 = 178
最后得到十进制数:178
2)小数 1/0*(-(n-1))!
0.0010010*2^(-1) + 0*2^(-2) + 1*2^(-3) = 0.125
最后得到十进制数:0.125

三、二进制转十六进制(先转换为十进制,再转换为十六进制) 1/0*(n-1)!

1)整数(从右向左四位并一位)
十进制:  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14 15 
十六进制:0  1  2  3  4  5  6  7  8  9   A   B   C   D   E  F
0001 0010 1111(不足四位前补0),分为三部分计算
   00010*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 1 = 1
   00100*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 2 = 2
   11111*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 8 + 4 + 2 + 1 = 15 = F
最后得到十六进制数(从前往后读):12F

#####2)小数(从左向右四位并一位)

0.111111111*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 8 + 4 + 2 + 1 = 15 = F 
最后得到十六进制数:0.F

四、八进制转十进制

1)整数 1…8*8^(n-1)!
3643*8^2 + 6*8^1 + 4*8^0 = 192 + 48 + 4 = 244
最后得到十进制数:244
2)小数 1…8*8^9(-(n))!
0.121*8^(-1) + 2*8(-2) = 5/32 = 0.15625
最后得到十进制数:0.15625

五、八进制转十六进制 1…8*8^(n-1)!

1)整数(先转十进制,再转十六进制)
十进制:  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14 15 
十六进制:0  1  2  3  4  5  6  7  8  9   A   B   C   D   E  F
2452*8^2 + 4*8^1 + 5*8^0 
   = 128 + 32 + 5 = 165  十进制
165165/16 = 10.......5
   得:      A       5
最后得到十六进制数(从前往后读): A5
2)小数 1…8*2^n (先转十进制,再转十六进制)
0.2142*8^(-1) + 1*8^(-2) + 4*8^(-3)
   = 35/128 = 0.2734375    十进制
0.27343750.2734375*16 = 4.375      取整 4
   0.375*16 = 6      取整 6
最后得到十六进制数(从前往后读):0.46

六、十进制转十六进制

1)整数 num/16 取整
十进制:  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14 15 
十六进制:0  1  2  3  4  5  6  7  8  9   A   B   C   D   E  F
124124/16 = 7......12
   得:     7       C
最后得到十六进制数(从前往后读):7C
2)小数 num/16 取整
0.70.7*16 = 11.2      取整 11 = B
   0.2*16 = 3.2      取整 3
   0.2*16 = 3.2      取整 3
   0.2*16 = 3.2      取整 3
   ...
(按理说,小数部分需要乘到小数部分为0,如果一直不为零,可以78入,保留几位根据自己需求定,我这里就78入保留3位了)
最后得到十六进制数(从前往后读):0.B33

七、十六进制转十进制

1)整数 num*16^(n-1)!
十进制:  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14 15 
十六进制:0  1  2  3  4  5  6  7  8  9   A   B   C   D   E  F
A57CD:
A*16^4 + 5*16^3 + 7*16^2 + C*16^1 + D*16^0 
= 10*16^4 + 5*16^3 + 7*16^2 + 12*16^1 + 13*16^0 
= 677837
最后得到十进制数:677837
2)小数 num*16^(-(n))
0.222*16^(-1)  = 125
最后得到十进制数:0.125

八、十六进制转八进制

1)整数(先转十进制,再转八进制)
十进制:  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14 15 
十六进制:0  1  2  3  4  5  6  7  8  9   A   B   C   D   E  F
F24A:
   F*16^3 + 2*16^2 + 4*16^1 + A*16^0 = 15*16^3 + 2*16^2 + 4*16^1 + 10*16^0 = 62026 (十进制)

6202662026/8 = 7753......2      取余 2
   7753/8 = 969......1      取余 1
   969/8 = 121.......1      取余 1
   121/8 = 15......1      取余 1
   15/8 = 1.......7      取余 7
   1/8 = 0......1      取余 1
最后得到十进制数(结果从后往前):171112
2)小数
0.D7:
D: 13/2 = 6......1      取余 1
   6/2 = 3......0      取余 0
   3/2 = 1......1      取余 1
   1/2 = 0......1      取余 1
   得:1101
7: 7/2 = 3......1      取余 1
   3/2 = 1......1      取余 1
   1/2 = 0......1      取余 1
   得:0111
   先转换为二进制:11010111

0110*2^2 + 1*2^1 + 1*2^0 = 3
0100*2^2 + 1*2^1 + 0*2^0 = 2
1111*2^2 + 1*2^1 + 1*2^0 = 7
最后得到十进制数(从前往后读)0.327

九、十六进制转二进制

1)整数
十进制:  0  1  2  3  4  5  6  7  8  9  10  11  12  13  14 15 
十六进制:0  1  2  3  4  5  6  7  8  9   A   B   C   D   E  F
7C77/2 = 3......1      取余 1
   3/2 = 1......1      取余 1
   1/2 = 0......1      取余 1
   得:111
C:12/2 = 6......0      取余 0
   6/2 = 3......0      取余 0
   3/2 = 1......1      取余 1
   1/2 = 0.......1      取余 1
   得:1100
最后得到二进制数:111 1100
2)小数
0.B71H:
B:11/2 = 5......1      取余 1
   5/2 = 2......1      取余 1
   2/2 = 1......0      取余 0
   1/2 = 0.......1      取余 1
   得:1011
77/2 = 3......1      取余 1
   3/2 = 1......1      取余 1
   1/2 = 0......1      取余 1
   得:0111
11/2 = 0......1      取余 1
   得:0001
最后得到二进制数:0.1011 0111 0001

十、十进制转八进制

1)整数
145145/8 = 18....1      取余 1
   18/8 = 2......2      取余 2
   2/8 = 0......2      取余 2
最后得到八进制数:221
2)小数
0.210.21*8 = 1.68         取整数 1
   0.68*8 = 5.44         取整数 5
   0.44*8 = 3.52         取整数 3
   0.52*8 = 4.16         取整数 4
   0.16*8 = 1.28         取整数 1
   0.28*8 = 2.24         取整数 2
   0.24*8 = 1.92         取整数 1
   0.92*8 = 7.36         取整数 7
...34入,保留3位)
最后得到八进制数:0.154

十一、十进制转二进制

1)整数(从下往上)
2323/2 = 11......1      取余 1
   11/2 = 5......1      取余 1
   5/2 = 2......1      取余 1
   2/2 = 1......0      取余 0
   1/2 = 0......1      取余 1
最后得到二进制数:10111
2)小数(从上往下)
0.1250.125*2 = 0.25      取整数 0
   0.25*2 = 0.5      取整数 0
   0.5*2 = 1.0      取整数 1 
(直到小数点后全为0,如果一直不为0,可以采用01入办法,保留后几位根据自己需求定)
最后得到二进制数:0.001

十二、八进制转二进制

1)整数
22122/2 = 1......0      取余 0
   1/2 = 0......1      取余 1
   得:10
22/2 = 1......0      取余 0
   1/2 = 0......1      取余 1
   得:010
11/2 = 0......1      取余 1
   得:001
最后得到二进制数:10 010 001
2)小数
0.40244/2 = 2......0      取余 0
   2/2 = 1......0      取余 0
   1/2 = 0......1      取余 1
   得:100
0:得:000
22/2 = 1......0      取余 0
   1/2 = 0......1      取余 1
   得:010
最后得到二进制数:0.100 000 010

为自己以后忘记方便查询~
欢迎提意见^^~

相关标签: Others