巧用位運算

2021-10-07 04:36:00 字數 1061 閱讀 8874

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...