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

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

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中的特殊字符随笔总结)