可以使用三种类型的方法:按位加法、JS hack 和基数转换。 具体实现如下:
这个问题的关键是你不能使用运算的符号,所以一个直接的想法是,是否可以在不加减乘除的情况下加减整数? 其实并不难,复习大学教科书中的计算机作文原理,应该能想到如何实现基本的加减乘除。 在这里,我们真的只需要实现一个基本的加法:
从上表可以看出,实现简单多位二进制整数加法的算法如下。
m 和 n 是两个二进制整数,求 m+n:
使用该操作查找 1 以及 m 和 n: m 的位: m'= m & n,使用异或运算求 m 和 n 的位,其中 1 是 1:n'= m n 如果 m'如果它不是 0,则为 m'向左移动一个位置(进位),即 m = m'<<1,即 n = n'如果 m'为 0,则为 n'这就是我们所要求的。
* -bit-arithmetic -- 定义bitbit算术加法函数bitadd(m, n) return n; } 位运算实现 1 - 循环累加 7 次 let multiply7 bo 1 = (num)=> return sum;} 位算术实现 2 - 二进制为 3 位(乘以 8)后,添加自己的补码(乘以 -1) let multiply7 bo 2 = (num) => bitadd(num <<3, -num) ;* -js hack -- hack way 1 - 使用函数的构造函数和乘数的字节码 let multiply7 hack 1 = (num) => new function(["return ",num,string.fromcharcode(42),"7"].join(""( hack 方法 2 - 带有 eval executor 和乘法符号的字节码 let multiply7 hack 2 = (num) => eval([num,string.]fromcharcode(42),"7"].join(""));Hack 方法 3 - 带有 settimeout 参数和乘法符号的字节码 settimeout(["window.multiply7_hack_3=(num)=>(7",string.fromcharcode(42),"num)"].join("")) * -Base Conversion -- Base Conversion Method - 使用 tostring 转换为十进制后七整数;然后在末尾(左边一位)加 0 并通过 parseint 转回十进制 let multiply7 base7 = (num)=>parseint([num.tostring(7),'0'].join(''),7);