将字符串转为16进制数_了解进制以及JS中的进制转换

69e1e03f60af6b21b10469f78018ee34.png

进制介绍

进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。对于任何一种进制—X进制,就表示每一位置上的数运算时都是逢X进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。

每一种进制的数字运算是按照当位的数字乘以进制底数的对应次方再相加得到的最终结果。

比如:

  • 十进制的123就是3 * 10^0 + 2 * 10^1 + 1 * 10^2

  • 二进制的101就是1 * 2^0 + 0 * 2^1 + 1 * 2^2,就是十进制的5

  • 16进制需要16个字符来代表,除了0-9以外,a-f分别代表10-15

    十六进制的 1b5就是5 * 16^0 + 11 * 16^1 + 1 * 16^2,就是十进制的437

短除法

就是把每一位(这里指的每一位是指个位十位之类的)除以要转换的进制的余数在乘以当前进制的值加到下一位去,当前位的值就为商,然后这样一直进行到最后一位(也就是个位)个位在对所须转换的进制在取模,那么这个模就是转换后的结果。多次重复,直到最后一位为0,从后往前看就是答案。

78ec588e91cc6908f55c40f7591c7ae0.png

短除法-二进制

e8b5f8cc90f2eeb1a9c26ce88722f6d7.png

短除法-八进制

a4d6b3be9909fa6f9bd958443bd55204.png

短除法-十六进制

JS中的进制

12
var a = 0xa; // 0x表示十六进制,但是js会强制转换为十进制来运算,0xa == 10var b = 010; // 0开头表示八进制,同样强制转换为十进制来运算 010 = 8

parseInt

1234
parseInt(str,radix) // 将字符串str按照radix进制编码方式转换为10进制返回,没有radix,默认为10;parseInt(’11’,8)) // 11按照8进制转换,结果为9parseInt(10,2) // 10按照2进制转换,结果为2parseInt('20',2)// 2进制里只有0和1,没有2,结果为NaN

Number.toString(radix)

1234567891011121314
//10进制转为16进制(10).toString(16) // =>"a"//8进制转为16进制(012).toString(16) // =>"a"//16进制转为10进制(0x16).toString(10) // =>"22"//16进制转为8进制(0x16).toString(8) // =>"26"//10进制转为2进制 //=>(1111).toString(2) // => "10001010111"//8进制转为2进制 //=>(01111).toString(2) //=>"1001001001"//16进制转为2进制 //=>(0x16).toString(2) // => "10110"

一道很有意思的题

1
[1,2,3].map(parseInt)

第一次循环,传给parseInt(1,0),把1按0进制转换,0默认表示10进制,然后输出1。

第二次循环,传给parseInt(2,1),把2按1进制转换,引擎懵逼了,1进制中根本不可能出现2这个数字好吗?我咋给你解析,无法解析,给了个NaN。

第三次循环,传给parseInt(3,2),把3按2进制转换,引擎又懵逼了,啥玩意儿?2进制中根本不可能出现3这个数字好吗?我咋给你解析,无法解析,又给了个NaN。

所以,这道题的结果是

1
[1, NaN, NaN]

bb9a7da651756e718b6cdb1b3b3bf39e.png

代码不是万能的,但不写代码是万万不能的

2020/08/10 Dary记

556c2fe15c9e3abad534b9591b58f1c4.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值