美文网首页
由大数相加引发的JS中的特殊字符随笔总结

由大数相加引发的JS中的特殊字符随笔总结

作者: CindyLu91 | 来源:发表于2018-11-06 15:14 被阅读0次

    一个大数相加的思路,膜拜大神

    function sumStrings(a,b){

    var res='', c=0;

    a = a.split('');

    b = b.split('');

    while (a.length || b.length || c){

    c += ~~a.pop() + ~~b.pop();

    res = c % 10 + res;

    c = c>9;

    }

    return res.replace(/^0+/,'');

    }

    说下自己的理解

    1. 先把两个参数转换成数组以便循环,每次从数组中取出一个元素,用~~运算符进行数字类型转换

    2. 变量res里保存的是最后相加的结果,是string类型,每次进行字符串连接。当两个数字相加超过10的时候进行取余,将取余结果进行连接

    3. 最巧妙的地方是根据c>9来进行加法的进位,根据bool和number类型的转换。

    下面列出了该算法里用到的一些基础知识

    1. ~ 位非运算符, 对位求反,转换逻辑如下,实际使用中多用于判断某个字符串是否包含另外一个字符串

    var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?-Math.floor(testData)-1:-Math.ceil(testData)-1:-1;

    var a="a"; var b="bcca"; console.log(b.indexOf(a)); console.log(~b.indexOf(a));

      // 3,-4

    ~~字符运算规则 转换成数字类型

    var testResult=(typeof testData==="number"&&!isNaN(testData)&&testData!==Infinity)?(testData>0)?Math.floor(testData):Math.ceil(testData):0;

    2. | 取整运算符

    console.log(1.3|0); //1

    3. >> 取半运算符 

    50 >> 1 //25 

    50 >> 0 //50

    50 >> 2 //12

    4.&运算符判断一个数是奇数还是偶数

    偶数 & 1 = 0

    奇数 & 1 = 1

    5. 使用^来完成值交换或者比较两个数是否相等,神奇的异或。。。。

    a = 1

    b = 2

    a ^= b

    b ^= a

    a ^= b

    结果a=2,b=1

    顺便列举下几种交换值的方法

    1. 借助第三变量,性能通常比另外几种好些

    2. 引入对象,利用对象的属性进行交换

    3. 利用数组下标

    4. 数字的加减法

    5. ES6语法,需要支持ES6

    相关文章

      网友评论

          本文标题:由大数相加引发的JS中的特殊字符随笔总结

          本文链接:https://www.haomeiwen.com/subject/emtsxqtx.html