前端学习记录Day3-Number和BigInt类型、二进制和十进制转换
还没有收到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的那个所谓转换有关。后天的整理就整理这个吧!
- 20100729 学习记录:Sql 类型转换
- C++中关于类型转换的学习记录
- Java 学习记录——十进制转化为二进制,int转化为char
- 关于IP地址十进制、二进制的相互转换(学习心得)
- Javascript学习笔记:2种其他类型转换为数字Number类型的方式
- 【Web前端学习笔记】Javascript_01_变量,数据类型,类型转换
- 前端学习记录 Day3(JavaScript)
- 从零开始前端学习[55]:类型转换和Math方法
- JavaScript的类型转换( 本贴来自网易前端微专业的个人学习笔记 )
- Struts 2学习及问题记录(3)——类型转换及输入校验
- python中各种基础类型的转换,二进制,八进制,十进制,十六进制
- java 二进制 十进制 十六进制数据类型转换
- 上机2 数据类型 控制结构1..编程求10以内整数的和。 2.编程实现将由键盘输入的十进制正整数转换为二进制数,并输出转换后的二进制结果。 3.编程实现由键盘输入的年份是否为闰年,要求采用方法调用
- 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换
- 前端js基础语法和类型转换笔记总结(按照这个顺序进行学习)
- 记录 十进制转换为二进制并输出奇数位和偶数位序列
- Java学习记录(4)——基本类型的类型转换
- Python 学习记录-数据类型 Day3~6
- 从零开始前端学习[6]:关于html5的元素类型转换,行级元素,块级元素,行块级元素类型
- python中各种基础类型的转换,二进制,八进制,十进制,十六进制