我是一名前端程序媛,最近在看面试题的时候突然想到parseInt()函数的第二个参数就代表指定数字的进制。对于一直对进制数字相互转换懵懵懂懂的我,决定好好研究一下。
十六进制转换为十进制
- 什么是十六进制
咱们现在所用的都是十进制,也就是逢10进1, 所以十六进制就是逢16就进1;当然在16进制中一般用 0~9 和 a~f 来表示,顾名思义0~9就是表示的0~9的数字,那么 a~f 就是对应的 11~15 的数字
- 如何转换
十六进制转换为十进制,就是 从右到左 开始,位数从0开始,每一位乘16的位数次方,再相加就是十进制的结果
十六进制:12b3
转换为十进制:3*16^0 + b*16^1 + 2*16^2 + 1*16^3
b --> 对应的就是数字11
= 3 + 11*16 + 2*16^2 + 1*16^3
= 4787
八进制转换为十进制
- 什么是八进制
八进制就是逢八进一,一般用 0~7 来表示
- 如何转换
八进制转换为十进制,就是 从右到左 开始,位数从0开始,每一位乘8的位数次方,再相加就是十进制的结果
八进制:1234
转换为十进制:4*8^0 + 3*8^1 + 2*8^2 + 1*8^3
= 4 + 24 + 2*8^2 + 8^3
= 668
二进制转换为十进制
二进制只有1和0,也是 从右到左 开始,位数从0开始,每一位乘2的位数次方,再想加就是十进制的结果
二进制:0101
转换为十进制:1*2^0 + 0*2^1 + 1*2^2 + 0*2^3
= 2 + 0 + 4 + 0
= 5
十进制与其他进制的相互转换
1.转换为十六进制 用十进制除以16,记录余数,得到的商再除以16,记录余数,以此类推,直到结果为0,将记录的余数逆序排列就得到了十六进制的数
十进制:56
转换为十六进制: 56/16=3 --- 8
3/16=0 --- 3
十六进制:38
2.转换为八进制 和转换为十六进制的方法大同小异,只不过是除以8,记录余数,同时也是逆序排列
十进制:56
转换为八进制:56/8=7 --- 0
7/8=0 --- 7
八进制:70
3.转换为二进制 也是用十进制除以2,记录余数,逆序排列
十进制:56
转换为二进制:56/2=28 --- 0
28/2=14 --- 0
14/2=7 --- 0
7/2=3 --- 1
3/2=1 --- 1
1/2=0 --- 1
二进制:111000
十六进制转换为二进制
十六进制转为二进制,就是十六进制的每一位表示二进制的四位
十六进制:38
转换为二进制:8 --- 1000
3 --- 0011
二进制:00111000
八进制转为二进制
八进制转换为二进制,就是八进制的每一位表示二进制的三位
八进制:70
转换为二进制:0 --- 000
7 --- 111
二进制:111000
其实知道了这些原理自己也可以封装一个parseInt()函数,进行其他进制的转换