您的位置:首页 > Web前端

前端学习记录Day3-Number和BigInt类型、二进制和十进制转换

2020-07-18 04:57 369 查看

还没有收到offer,心情有些复杂,希望不会是最不希望的那个结果。今天没有太好好学习,只做了五道简单题。我应该以后每天都列好下一天的文章计划,以督促自己做该做的事情。

今天做题的时候跳过了一道叫“最大连续子数组”的题目,涉及到了动态规划啊,分治法什么的。感觉很麻烦,然后今天就犯了懒不想写了。所以明天的内容就好好地写一下这道题。

今天学到了JS新的一种数据类型:BigInt。顾名思义,这个类型可以存储比Number数据类型支持范围更大的整数值。今天做得两道Leetcode的题,思路都是对的,但是上传之后有些例子就没法通过,就是因为没有考虑到数值很大时的情况。 

1. Number类型

在程序中,Number类型的实质就是一个64位的浮点数(8字节)。第0位是符号位,1-11位(共11位)储存指数,12-63位(共52位)储存小数部分。所以Number的取值范围为±2^53,可以利用Number.MAX_VALUE/Number.MIN_VALUE来查看。

但同时,还有一个Number.MAX_SAFE_INTEGER的值,这个又是什么呢?再一次顾名思义,表示可以在计算中实用的最大安全整数。这是什么意思呢?看下面这个例子:

[code]Number.MAX_SAFE_INTEGER+1===Number.MAX_SAFE_INTEGER+2 //true

这里会输出 true。也就是说,任何大于这个MAX_SAFE_INTEGER的整数无法始终准确地在内存中表示

有趣的是,

[code]Number.MAX_SAFE_INTEGER===Number.MAX_VALUE  //false
Number.MAX_SAFE_INTEGER<Number.MAX_VALUE    //true

也就是说,这个安全值是比实际Number可以表示的值要小的。大于安全值的整数,表示起来就可能没有那么准确。且数值越大,准确度越低。

2. BigInt类型

在处理Number类型handle不住的整数时,就可以用到BigInt。用法跟Number类似。

3. 二进制、十进制转换

 在做题的时候遇到了这样一道题:为两个字符串表示的二进制数做加法。我很快就想到可以用字符串的parseInt()方法将字符串转换成整数,因为parseInt()方法中的第二个参数为radix,也就是用什么进制来转换字符。比如,parseInt("100",2)就是将字符串“100”看作是二进制数,再转换成十进制整数。

如下所示:

在进行整数相加后,可以使用toString(radix)方法将一个整数转换成相应进制的字符串类型。

[code]var a=4;
var s=a.toString(2);

输出结果为:

[code]console.log(s) //"100"

理想很丰满,现实很骨感。结果我就被两个超长字符串拉下了水。

Input:"10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101" "110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"

Output:"110111101100010011000101110110100000011101000101011000000000000000000000000000000000000000000000000"

Expected:"110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000"

那用BigInt该怎么做呢?

这里又有个巧妙方法:

[code]let b=100;
let c=Number("0b"+b);

 猜猜会输出什么?

[code]console.log(c); //4

也就是说,Number()里面的参数被自动转换成二进制数了!BigInt也同理,可以做到这样的转换。

这样一看,原题就简单过头了:

[code]var addBinary = function(a, b) {
let c=BigInt("0b"+a)+BigInt("0b"+b);
return c.toString(2);
};

既然"0b"可以转换成二进制,"0x"是不是也可以转换成十六进制?当然!感兴趣的话试试就知道了!

感觉这个问题其实跟js的那个所谓转换有关。后天的整理就整理这个吧!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐