二进制、八进制、十进制、十六进制(整数、小数)之间的转换
程序员文章站
2022-07-15 09:57:41
...
二进制、八进制、十进制、十六进制(整数、小数)之间的转换
n表示位数----(整数,从右边是第一位;小数,从左是第一位,即小数点后是第一位)
num表示对应位置的数值
1…8表示1到8中任意数值
!表示阶加,一直加到n为0 ---- 此用法只限本文
一、二进制转八进制 1/0*(n-1)!
1)整数(从右向左三位并一位)
11 110 000:
011 110 100 (不足三位前面补0,分为三部分计算)
011:0*2^2 + 1*2^1 + 1*2^0 = 3
110:1*2^2 + 1*2^1 + 0*2^0 = 6
000:1*2^2 + 0*2^1 + 0*2^0 = 4
最后得到八进制数(从前往后读):364
2)小数(从左向右三位并一位)
0.110:
110:1*2^2 + 1*2^1 + 0*2^0 = 6
最后得到八进制数:0.6
二、二进制转十进制
1)整数 1/0*(n-1)!
10110010:
1*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.001:
001:0*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),分为三部分计算
0001:0*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 1 = 1
0010:0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 2 = 2
1111:1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 8 + 4 + 2 + 1 = 15 = F
最后得到十六进制数(从前往后读):12F
#####2)小数(从左向右四位并一位)
0.1111:
1111:1*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)!
364:
3*8^2 + 6*8^1 + 4*8^0 = 192 + 48 + 4 = 244
最后得到十进制数:244
2)小数 1…8*8^9(-(n))!
0.12:
1*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
245:
2*8^2 + 4*8^1 + 5*8^0
= 128 + 32 + 5 = 165 十进制
165:
165/16 = 10.......5
得: A 5
最后得到十六进制数(从前往后读): A5
2)小数 1…8*2^n (先转十进制,再转十六进制)
0.214:
2*8^(-1) + 1*8^(-2) + 4*8^(-3)
= 35/128 = 0.2734375 十进制
0.2734375:
0.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
124:
124/16 = 7......12
得: 7 C
最后得到十六进制数(从前往后读):7C
2)小数 num/16 取整
0.7:
0.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,如果一直不为零,可以7舍8入,保留几位根据自己需求定,我这里就7舍8入保留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.2:
2:2*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 (十进制)
62026:
62026/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
011:0*2^2 + 1*2^1 + 1*2^0 = 3
010:0*2^2 + 1*2^1 + 0*2^0 = 2
111:1*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
7C:
7:7/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
7:7/2 = 3......1 取余 1
3/2 = 1......1 取余 1
1/2 = 0......1 取余 1
得:0111
1:1/2 = 0......1 取余 1
得:0001
最后得到二进制数:0.1011 0111 0001
十、十进制转八进制
1)整数
145:
145/8 = 18....1 取余 1
18/8 = 2......2 取余 2
2/8 = 0......2 取余 2
最后得到八进制数:221
2)小数
0.21:
0.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
...
(3舍4入,保留3位)
最后得到八进制数:0.154
十一、十进制转二进制
1)整数(从下往上)
23:
23/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.125:
0.125*2 = 0.25 取整数 0
0.25*2 = 0.5 取整数 0
0.5*2 = 1.0 取整数 1
(直到小数点后全为0,如果一直不为0,可以采用0舍1入办法,保留后几位根据自己需求定)
最后得到二进制数:0.001
十二、八进制转二进制
1)整数
221:
2:2/2 = 1......0 取余 0
1/2 = 0......1 取余 1
得:10
2:2/2 = 1......0 取余 0
1/2 = 0......1 取余 1
得:010
1:1/2 = 0......1 取余 1
得:001
最后得到二进制数:10 010 001
2)小数
0.402:
4:4/2 = 2......0 取余 0
2/2 = 1......0 取余 0
1/2 = 0......1 取余 1
得:100
0:得:000
2:2/2 = 1......0 取余 0
1/2 = 0......1 取余 1
得:010
最后得到二进制数:0.100 000 010
为自己以后忘记方便查询~
欢迎提意见^^~
推荐阅读
-
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
-
Shell脚本中不同进制数据转换的例子(二进制、八进制、十六进制、base64)
-
进制转换算法原理(二进制 八进制 十进制 十六进制)
-
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
-
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
-
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
-
C++中二进制 八进制 十进制 十六进制的表示方法
-
Python:将十进制数转换为二进制,八进制,十六进制数
-
栈实现十进制转换为二进制,八进制和十六进制
-
十进制转换为二进制、八进制、十六进制(JAVA)