国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js中的位運算

banana_pi / 2724人閱讀

摘要:位與真真為真,其余為假和二進制位與運算由于奇數的二進制末位為,偶數為,跟的位與運算后,分別為和,因此可以用位與運算來判斷奇偶數。為奇數為偶數位或假假為假,其余為真和二進制位或運算整數與的位或運算,都是本身。

前言

在平常的工作中位運算用得比較少,一般用其他更容易理解得方式去達到相同目的。在計算機內部,一切運算最終都轉化成二級制運算,直接使用二級制運算執行得效率是最高的。偶爾看到一道面試題,復習一下這方面知識,先來看一下這道面試題:

var a = 10;
a ^= (1<<4) - 1;
a的值

題目先放一放,看看js中有哪些位運算。

1. 位與(&)

真真為真,其余為假

9和10二進制位與運算

      1001
    & 1010
    -------
      1000

由于奇數的二進制末位為1,偶數為0,跟1的位與運算后,分別為1和0,因此可以用位與運算來判斷奇偶數。

if(n & 1) {
    console.log("n為奇數");
} else {
    console.log("n為偶數");
}
2. 位或(|)

假假為假,其余為真

9和10二進制位或運算

      1001
    | 1010
    -------
      1011

整數與0的位或運算,都是本身。浮點數不支持位運算,過程中會自動轉化成整數,利用這一點,可以將浮點數與0進行位或運算即可達到取整目的。

console.log(15.22 | 0); // 15
3. 位非(~)

真為假,假為真

9二進制位非運算

    ~ 0000000000000000 0000000000001001
    -------取反
      1111111111111111 1111111111110110
    -------符號位不變,其余取反
      1000000000000000 0000000000001001
    -------加1
      1000000000000000 0000000000001010

按位非操作,首先每一位取反,然后,第一位為負數符號位保持不變,剩余取反加1就是最后結果。

4. 異或(^)

相同為假,不同為真

9和10二進制異或運算

      1001
    | 1010
    -------
      0011

可以用于交換兩個整數的值,不過一般很少這么用

var a = 3, b = 5;
a ^= b;
b ^= a;
a ^= b;
console.log("a:", a); // 5
console.log("b:", b); // a
5. 有符號左移(<<)

首位符號為不動,把32位二進制數字整體往左邊移動指定位數,左邊超出部分被舍去,右邊補0。

9二進制有符號左移5位
    9<<5
    0000000000000000 0000000000001001
    ------
    0000000000000000 0000000100100000

計算機內是這樣位移計算的,實際應用計算我們可以通過公式:num * (2^n),即:9*Math.pow(2,5)

6. 有符號右移(>>)

首位符號為不動,把32位二進制數字整體往右邊移動指定位數,右邊超出部分被舍去,左邊補0。

288二進制有符號右移5位
    9>>5
    0000000000000000 0000000100100000
    ------
    0000000000000000 0000000000001001

計算機內是這樣位移計算的,實際應用計算我們可以通過公式:num / (2^n),即:288/Math.pow(2,5)

7. 無符號右移(>>>)

符號為也跟著一起移動,這樣,無符號右移會把負數的二進制當成整數的二進制碼

4294967296二進制無有符號右移5位
    4294967296>>>5
    1000000000000000 0000000000000000
    ------
    0000010000000000 0000000000000000
回歸面試題
var a = 10;
a ^= (1<<4) - 1;

1<<4左移4位,即1*Math.pow(2, 4) == 16,則a ^= 15

10和15的異或運算
    1111
  ^ 1010
 .........
    0101

0101二進制表示5,所以a的值位5

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93266.html

相關文章

  • 由left-pad扯到JS的位運算

    摘要:原碼補碼和反碼原碼一個數在計算機中是以二進制的形式存在的,其中第一位存放符號正數為負數為。中的位運算在中按位操作符會將其操作數轉成補碼形式的有符號位整數。原文鏈接由扯到中的位運算 這個話題的由來是2016年3月份的時候 NPM 社區發生了‘left-pad’事件,不久后社區就有人發布了用來補救的,也是現在大家能用到的 left-pad 庫。 最開始這個庫的代碼是這樣的。 module....

    LeoHsiun 評論0 收藏0
  • 復習js 2

    摘要:復習表達式和運算符運算符擁有如下類型的運算符。例如十進制數字用二進制表示為,位運算符就是在這個二進制表示上執行運算,但是返回結果是標準的數值。因此,用于布爾值時,當任何一個操作數為則返回如果操作數都是則返回。 復習js day2 表達式和運算符 運算符 JavaScript 擁有如下類型的運算符。本節描述了運算符和運算符的優先級。 賦值運算符(Assignment operators...

    yhaolpz 評論0 收藏0
  • 深入研究js的位運算及用法

    摘要:雖然在內部,數值都是以位浮點數的形式儲存,但是做位運算的時候,是以位帶符號的整數進行運算的,并且返回值也是一個位帶符號的整數。如下表應用場景取整對于一般的整數,返回值不會有任何變化。例如,結果為負數存儲采用的形式是二進制補碼。 什么是位運算? 位運算是在數字底層(即表示數字的 32 個數位)進行運算的。由于位運算是低級的運算操作,所以速度往往也是最快的(相對其它運算如加減乘除來說),并...

    zhoutao 評論0 收藏0
  • 深入研究js的位運算及用法

    摘要:雖然在內部,數值都是以位浮點數的形式儲存,但是做位運算的時候,是以位帶符號的整數進行運算的,并且返回值也是一個位帶符號的整數。如下表應用場景取整對于一般的整數,返回值不會有任何變化。例如,結果為負數存儲采用的形式是二進制補碼。 什么是位運算? 位運算是在數字底層(即表示數字的 32 個數位)進行運算的。由于位運算是低級的運算操作,所以速度往往也是最快的(相對其它運算如加減乘除來說),并...

    hlcfan 評論0 收藏0
  • 深入講解js的位運算及實際用法

    摘要:雖然在內部,數值都是以位浮點數的形式儲存,但是做位運算的時候,是以位帶符號的整數進行運算的,并且返回值也是一個位帶符號的整數。如下表應用場景取整對于一般的整數,返回值不會有任何變化。例如,結果為負數存儲采用的形式是二進制補碼。 什么是位運算? 位運算是在數字底層(即表示數字的 32 個數位)進行運算的。由于位運算是低級的運算操作,所以速度往往也是最快的(相對其它運算如加減乘除來說),并...

    jifei 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<