可以使用三種型別的方法:按位加法、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);