最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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. 掩碼運算

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

// 使用掩碼獲取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ù)二進制表示中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)文章

  • JavaScript判斷元素是否在可視區(qū)域的三種方法

    JavaScript判斷元素是否在可視區(qū)域的三種方法

    這這篇文章給大家總結(jié)了JavaScript判斷元素是否在可視區(qū)域的三種方法,getBoundingClientRect,IntersectionObserver和offsetTop、scrollTop這三種方法,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • javascript二維數(shù)組和對象的深拷貝與淺拷貝實例分析

    javascript二維數(shù)組和對象的深拷貝與淺拷貝實例分析

    這篇文章主要介紹了javascript二維數(shù)組和對象的深拷貝與淺拷貝,結(jié)合實例形式分析了JavaScript針對數(shù)組與對象的深拷貝及淺拷貝相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • 微信小程序?qū)崿F(xiàn)豎排slider效果

    微信小程序?qū)崿F(xiàn)豎排slider效果

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)豎排slider效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Webpack學(xué)習(xí)之動態(tài)import原理及源碼分析

    Webpack學(xué)習(xí)之動態(tài)import原理及源碼分析

    這篇文章主要為大家介紹了Webpack學(xué)習(xí)之動態(tài)import原理及源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 微信小程序傳值以及獲取值方法的詳解

    微信小程序傳值以及獲取值方法的詳解

    這篇文章主要介紹了微信小程序傳值以及獲取值方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 基于Bootstrap的Metronic框架實現(xiàn)頁面鏈接收藏夾功能

    基于Bootstrap的Metronic框架實現(xiàn)頁面鏈接收藏夾功能

    本文給大家介紹基于Metronic的Bootstrap開發(fā)框架實現(xiàn)頁面鏈接收藏夾功能,非常不錯,具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • 解決jquery插件沖突的問題

    解決jquery插件沖突的問題

    本篇文章主要是對解決jquery插件沖突的方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • js實現(xiàn)圖片放大并跟隨鼠標(biāo)移動特效

    js實現(xiàn)圖片放大并跟隨鼠標(biāo)移動特效

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)圖片放大并跟隨鼠標(biāo)移動特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 一文入門Webpack文件指紋

    一文入門Webpack文件指紋

    文件指紋是文件打包后輸出的文件名的后綴,通常用來做一些文件的版本管理,文中給大家提到了幾種文件指紋的設(shè)置用法,對Webpack文件指紋相關(guān)知識感興趣的朋友一起看看吧
    2022-02-02
  • js獲取內(nèi)聯(lián)樣式的方法

    js獲取內(nèi)聯(lián)樣式的方法

    這篇文章主要介紹了js獲取內(nèi)聯(lián)樣式的方法,針對標(biāo)準(zhǔn)瀏覽器與IE瀏覽器進行不同的判斷與獲取,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01

最新評論

蒲城县| 元氏县| 怀仁县| 邵阳县| 德江县| 昔阳县| 鄂托克前旗| 安远县| 蓬溪县| 翁源县| 禄劝| 越西县| 茂名市| 金昌市| 衡南县| 镇平县| 太白县| 德庆县| 墨江| 阿坝县| 南充市| 五寨县| 阿拉善左旗| 六枝特区| 会同县| 东方市| 昭平县| 额敏县| 永善县| 错那县| 鄱阳县| 大连市| 青神县| 读书| 南通市| 八宿县| 彰化市| 政和县| 如皋市| 长海县| 崇仁县|