欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

20個你不得不知道的js位運算用法

 更新時間:2023年12月04日 08:24:52   作者:慕仲卿  
位運算,那些看似晦澀但又蘊含無限魔力的數(shù)字魔術(shù),在JavaScript開發(fā)中扮演了默默無聞卻又至關(guān)重要的角色,本文介紹多個js位運算的使用場景,闡述在JavaScript中,如何巧妙運用位運算實現(xiàn)效率的提升和算法的優(yōu)化,需要的朋友可以參考下

位運算的奇妙應(yīng)用

1. 乘法和除法運算

位運算可實現(xiàn)乘法和除法的簡易版本,如num << 1(乘2),num >> 1(除2)。

let num = 4;
let multiplied = num << 1; // 結(jié)果為8
let divided = num >> 1; // 結(jié)果為2

2. 判斷奇偶性

通過和1的與運算檢查最低位,判斷數(shù)值的奇偶性。

let num = 7;
let isOdd = num & 1; // 結(jié)果為1,奇數(shù)

3. 交換變量

利用異或運算交換兩個變量的值,無需額外空間。

let a = 2, b = 3;
a ^= b;
b ^= a;
a ^= b; // a === 3, b === 2

4. 取絕對值

使用位運算取整數(shù)的絕對值。

let num = -6;
let abs = (num ^ (num >> 31)) - (num >> 31); // 結(jié)果為6

5. 檢測數(shù)值是否為2的冪

檢測一個數(shù)是否為2的冪可以通過判斷其是否只有一個位是1。

let num = 8;
let isPowerOfTwo = (num & (num - 1)) === 0; // 結(jié)果為true

6. 輪轉(zhuǎn)位

通過位運算實現(xiàn)位的循環(huán),左輪或右輪。

let num = 21; // (10101)
num = (num >> 3) | (num << (32 - 3)); // 右輪轉(zhuǎn)3位

7. 快速計算

快速計算n2n,等同于n << n。

let n = 5;
let result = 5 << 5; // 結(jié)果為160

8. 掩碼運算

使用掩碼進(jìn)行位運算,快速提取片段中的信息。

// 使用掩碼獲取RGB顏色的紅色分量
let color = 0xffeEDC;
let red = (color & 0xff0000) >> 16;

9. 快速杜敏運算

利用異或運算實現(xiàn)一次杜敏運算,即不改變其他位的情況下翻轉(zhuǎn)特定位。

let flags = 5; // (101)
let mask = 2; // (010)
flags ^= mask; // 結(jié)果為7 (111)

10. 利用掩碼來設(shè)置位

設(shè)置特定位為1而不影響其他位。

let num = 4; // (100)
num |= 2; // 結(jié)果為6 (110)

11. 利用掩碼來清零位

通過與運算將特定位清零。

let num = 15; // (1111)
num &= ~8; // 結(jié)果為7 (0111)

12. 低效的按位非運算

通過按位非運算實現(xiàn)變量值減1。

let num = 10;
num = ~num; // 結(jié)果為-11

13. 條件無分支

實現(xiàn)條件判斷無需if語句,適用于某些性能敏感的場合。

let a = 10, b = 20;
let max = a - ((a - b) & ((a - b) >> 31));

14. 檢測位是否被置位

檢測某一位是否為1。

let flag = 8; // (1000)
let isSet = flag & (1 << 3); // 結(jié)果為8,表示第3位被置位

15. 浮點數(shù)轉(zhuǎn)整數(shù)

通過零填充右移將浮點數(shù)向下取整。

let floatNum = 3.9;
let intNum = floatNum >> 0; // 結(jié)果為3

16. RGB顏色混合

通過位運算實現(xiàn)簡易的RGB顏色值混合。

let color1 = 0xff00ff, color2 = 0x00ff00;
let mixed = (color1 & color2) + (((color1 ^ color2) & 0xfefefe) >> 1);

17. 模2^n取余

利用位運算快速取模2的冪。

let num = 19;
let mod = num & (8 - 1); // 結(jié)果為3,相當(dāng)于19 % 8

18. 實現(xiàn)布爾數(shù)組

使用位運算實現(xiàn)高效的布爾數(shù)組,節(jié)約空間。

let array = 0;
array |= 1 << index; // 設(shè)置index位置為1
let isTrue = (array & (1 << index)) !== 0; // 檢測index位置是否為1

19. 求相反數(shù)

通過位運算獲取一個數(shù)的相反數(shù)。

let num = -48;
let opposite = ~num + 1; // 結(jié)果為48

20.計算漢明權(quán)重

計算一個數(shù)二進(jìn)制表示中1的個數(shù)(漢明權(quán)重)。

let num = 13; // (1101)
let count = 0;
while(num) {
    count++;
    num &= num - 1; // 清除最低位的1
}
// 結(jié)果 count 為3

以上就是20個你不得不知道的js位運算用法的詳細(xì)內(nèi)容,更多關(guān)于js位運算用法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論