• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    js中位運算的運用實例分析

    來源:懂視網 責編:小采 時間:2020-11-27 22:02:42
    文檔

    js中位運算的運用實例分析

    js中位運算的運用實例分析:我們可能很少在編程中用位運算,如果沒深入學習,可能也很難理解。平時的數值運算,其實是要先轉換成二進制再進行運算的,而位運算就是直接進行二進制運算,所以位運算的執行效率肯定是更高的。下面通過一些實例來加深對位運算的理解。 按位與(&) &&運算符我
    推薦度:
    導讀js中位運算的運用實例分析:我們可能很少在編程中用位運算,如果沒深入學習,可能也很難理解。平時的數值運算,其實是要先轉換成二進制再進行運算的,而位運算就是直接進行二進制運算,所以位運算的執行效率肯定是更高的。下面通過一些實例來加深對位運算的理解。 按位與(&) &&運算符我

    只有對應的數為1時,結果才為1,其他都為0。
    判斷一個數是奇數還是偶數,我們會用求余數來判斷:

    function assert(n) {
     if (n % 2 === 1) {
     console.log("n是奇數");
     } else {
     console.log("n是偶數");
     }
    }
    
    assert(3); // "n是奇數"

    我們也可以用一個數和1進行按位&操作來判斷,而且速度更快:

    function assert(n) {
    if (n & 1) {
     console.log("n是奇數");
    } else {
     console.log("n是偶數");
    }
    }
    
    assert(3); // "n是奇數"

    下面是位運算過程:

    1 = 0001
    3 = 0011
    --------
       & = 0001

    奇數的二進制碼的最后一位數肯定是1,而1只有最后一位為1,按位&操作之后,結果肯定只有最后一位數為1。而偶數的二進制表示的最后一位數是0,和1進行按位&操作,結果所有位數都為0。

    按位或(|)

    |與||操作符的道理也是一樣的,只要兩個數中有一個數為1,結果就為1,其他則為0。

      0001
    | 0011
     ---------
      0011

    對浮點數向下求整,我們會用下面的方法:

    var num = Math.floor(1.1); // 1

    我們也可以用位運算來求整:

    var num = 1.1 | 0; // 1

    其實浮點數是不支持位運算的,所以會先把1.1轉成整數1再進行位運算,就好像是對浮點數向下求整。所以1|0的結果就是1。

    按位非(~)

    按位非就是求二進制的反碼:

    var num = 1; // 二進制 00000000000000000000000000000001
    var num1 = ~num; // 二進制 11111111111111111111111111111110

    我們知道,js中的數字默認是有符號的。有符號的32位二進制的最高位也就是第一位數字代表著正負,1代表負數,0代表整數。那到底11111111111111111111111111111110等于多少呢?最高位為1代表負數,負數的二進制轉化為十進制:符號位不變,其他位取反加1。取反之后為10000000000000000000000000000001,加1之后為10000000000000000000000000000010,十進制為-2。

    按位異或(^)

    按位異或是兩個數中只有一個1時返回1,其他情況返回0。

       0001
    ^ 0011
     ---------
      0010

    數字與數字本身按位異或操作得到的是0,因為每兩個對應的數字都相同,所以最后返回的都是0。

    我們經常會需要調換兩個數字的值:

    var num1 = 1, num2 = 2, temp;
    temp = num1;
    num1 = num2; // 2
    num2 = temp; // 1

    如果裝逼一點的話,可以這樣:

    var num1 = 1, num2 = 2;
    num1 = [num2, num2 = num1][0];
    console.log(num1); // 2
    console.log(num2); // 1

    如果想再裝的穩一點的話,可以這樣:

    var num1 = 1, num2 = 2;
    num1 ^= num2; // num1 = num1 ^ num2 = 1 ^ 2 = 3
    num2 ^= num1; // num2 = num2 ^ (num1 ^ num2) = 2 ^ (1 ^ 2) = 1
    num1 ^= num2; // num1 = num1 ^ num2 = 3 ^ 1 = 2
    console.log(num1); // 2
    console.log(num2); // 1

    有符號左移(<<)

    有符號左移會將32位二進制數的所有位向左移動指定位數。如:

    var num = 2; // 二進制10
    num = num << 5; // 二進制1000000,十進制64

    如果要求2的n次方,可以這樣:

    function power(n) {
     return 1 << n;
    }
    
    power(5); // 32

    1的二進制是01,左移5位就是0100000,十進制就是2的5次方32。

    有符號右移(>>)

    有符號右移會將32位二進制數的所有位向右移動指定位數。如:

    var num = 64; // 二進制1000000
    num = num >> 5; // 二進制10,十進制2

    求一個數的二分之一:

    var num = 64 >> 1; // 32

    有符號左移與右移不會影響符號位。

    無符號右移(>>>)

    正數的無符號右移與有符號右移結果是一樣的。負數的無符號右移會把符號位也一起移動,而且無符號右移會把負數的二進制碼當成正數的二進制碼:

    var num = -64; // 11111111111111111111111111000000
    num = num >>> 5; // 134217726

    所以,我們可以利用無符號右移來判斷一個數的正負:

    function isPos(n) {
    return (n === (n >>> 0)) ? true : false; 
    }
    
    isPos(-1); // false
    isPos(1); // true

    -1>>>0雖然沒有向右移動位數,但-1的二進制碼已經變成了正數的二進制碼:

    11111111111111111111111111111111

    所以-1>>>0的值為4294967295。

    總結

    以上的例子在平常可能會比較容易用到或看到,也是屬于比較容易理解的。一些比較復雜的、難理解的,我覺得應該盡量少用,因為會給閱讀者帶來困難,也會給自己帶來麻煩。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    js中位運算的運用實例分析

    js中位運算的運用實例分析:我們可能很少在編程中用位運算,如果沒深入學習,可能也很難理解。平時的數值運算,其實是要先轉換成二進制再進行運算的,而位運算就是直接進行二進制運算,所以位運算的執行效率肯定是更高的。下面通過一些實例來加深對位運算的理解。 按位與(&) &&運算符我
    推薦度:
    標簽: 用法 應用 js
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99久久99久久精品国产片果冻| 久久久WWW成人免费精品| 国产精品无码一区二区在线 | 2021精品国产综合久久| 欧美日韩专区麻豆精品在线 | A级精品国产片在线观看| 亚洲麻豆精品国偷自产在线91| 91精品国产91久久久久久青草| 国产精品亚洲а∨无码播放| 亚洲精品国产精品乱码不卡| 国产乱人伦精品一区二区在线观看 | 国产高清国内精品福利99久久| 无码精品A∨在线观看| 手机日韩精品视频在线看网站| 国产精品自在在线午夜福利| 91精品国产91久久久久久| 99精品无人区乱码在线观看| 无码国产精品一区二区免费式芒果| 久草热久草热线频97精品| 99亚洲精品视频| 亚洲国产精品一区二区久久| 2020国产精品永久在线| 成人精品一区二区三区电影黑人| 51午夜精品免费视频| 亚洲AV无码久久精品狠狠爱浪潮| 欧美ppypp精品一区二区| 精品国产一区二区三区AV性色 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产麻豆精品一区二区三区v视界| 亚洲国产精品成人精品无码区| 亚洲综合欧美精品一区二区| 四虎国产精品永免费| 亚洲精品国产成人影院| 亚洲精品少妇30p| 日韩人妻无码精品久久久不卡| 亚洲中文字幕久久精品无码喷水 | 国产区精品一区二区不卡中文| 久久精品国产亚洲AV高清热 | 99久久精品无码一区二区毛片| 中文字幕精品一区影音先锋 | 欧美人与性动交α欧美精品成人色XXXX视频 |