十进制、二进制、八进制、十六进制的相互转换

351 阅读3分钟

我是一名前端程序媛,最近在看面试题的时候突然想到parseInt()函数的第二个参数就代表指定数字的进制。对于一直对进制数字相互转换懵懵懂懂的我,决定好好研究一下。

十六进制转换为十进制

  1. 什么是十六进制

咱们现在所用的都是十进制,也就是逢10进1, 所以十六进制就是逢16就进1;当然在16进制中一般用 0~9a~f 来表示,顾名思义0~9就是表示的0~9的数字,那么 a~f 就是对应的 11~15 的数字

  1. 如何转换

十六进制转换为十进制,就是 从右到左 开始,位数从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

八进制转换为十进制

  1. 什么是八进制

八进制就是逢八进一,一般用 0~7 来表示

  1. 如何转换

八进制转换为十进制,就是 从右到左 开始,位数从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()函数,进行其他进制的转换