赞
踩
// 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 // 按位异或 每一位都不同,结果才为 1 // 8 ^ 7 // -> 15 // 8 ^ 8 // -> 0 // 1000 ^ 0111 -> 1111 -> 15 // 1000 ^ 1000 -> 0000 -> 0 // 这道题中可以按位异或,因为按位异或就是不进位加法, // 8 ^ 8 = 0 如果进位了,就是 16 了, // 所以我们只需要将两个数进行异或操作,然后进位。 // 那么也就是说两个二进制都是 1 的位置, // 左边应该有一个进位 1, // 所以可以得出以下公式 a + b = (a ^ b) + ((a & b) << 1) , // 然后通过迭代的方式模拟加法 function Add(num1, num2) { if (num1 == 0) return num2 if (num2 == 0) return num1 let newA = num1 ^ num2 let newB = (num1 & num2) << 1 return Add(newA, newB) }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。