1、不用額外空間交換兩個數字變數的值
解1:異或運算(只能交換整數)
var a =3;
var b =4;
a = a^b;
// a = 7
b = a^b;
// b = 3
a = a^b;
// a = 4
解2:加減法運算(非整數存在精度問題)
var a =3;
var b =4;
a = a + b;
// a = 7
b = a - b;
// b = 3
a = a - b;
// a = 4
解3: 利用乘除法(非整數存在精度問題)
var a =3;
var b =4;
a = a * b;
// a = 12
b = a / b;
// b = 3
a = a / b;
// a = 4
解4:利用es6結構賦值
[a, b]
=[b, a]
;
2、利用~~取整
~~相當於math.floor()
~~非數字為0
~
~1.1
// 1
3、利用|0取整
4、利用|1判斷奇偶數
5、利用!!將資料型別轉化成布林值
6、兩個數不使用四則運算得出和
按位異或就是不進製加法,8 ^ 8 = 0
如果進製了,就是 16 。所以我們只需要將兩個數進行異或操作,然後進製。那麼也就是說兩個二進位制都是 1 的位置,左邊應該有乙個進製 1,所以可以得出以下公式a + b = (a ^ b) + ((a & b) << 1)
,然後通過迭代的方式模擬加法:
function
sum(a, b)
巧用位運算
1 用乙個表示式,判斷乙個數x是否是2的n次方 2,4,8,16.不可用迴圈語句。解析 x 2,4,8,16轉化成二進位制是10,100,1000,10000。如果減1則變成01,011,0111,01111。兩者做按位與運算,結果如果為0,則x是2的n次方。答案 x x 1 2 統計乙個整數的二進...
巧用JS位運算
1.使用按位非 判斷索引存在 這是乙個很常用的技巧,如判斷乙個數是否在陣列裡面 如果url含有?號,則後面拼上 符號,否則加上?號 url url indexof 因為 1 0 1在記憶體的表示的二進位制符號全為1,按位非之後就變成了0.進一步說明 1在記憶體的表示為 0000.0001,第一位0表...
巧用JS位運算
位運算的方法在其它語言也是一樣的,不侷限於js,所以本文提到的位運算也適用於其它語言。位運算是低階的運算操作,所以速度往往也是最快的 相對其它運算如加減乘除來說 並且借助位運算的特性還能實現一些演算法。恰當地使用運算有很多好處。下面舉幾個例子。這是乙個很常用的技巧,如判斷乙個數是否在陣列裡面 如果u...