1. 程式人生 > >js位操作

js位操作

個數 bsp 最終 span 都是 過程 ack 例如 ~~

1.&(與)

都是1才是1

例如:14&15 (14 二進制 1110

15 二進制 1111

&與的結果 1110 ----》結果14)

(14&15).toString(2); //"1110"

2.|(或)

有一個是1就是1

例如:14|15 (14 二進制 1110

   15 二進制 1111

   |與的結果 1111 ----》結果15)

(14|15).toString(2); //
"1111"

3.^(異或)

不同就是1

例如:14^15 (14 二進制 1110

15 二進制 1111

^與的結果 0001 ----》結果1)

(14^15).toString(2); //"1"

4.~(非)

說到這裏就要科普一下了,JavaScript僅支持32位整型數

0變1,1變0

例如:~14(14 二進制 0000 0000 0000 0000 0000 0000 0000 1110

      ~的結果 1111 1111 1111 1111 1111 1111 1111 0001

最高位符號位為1,說明是個負數,大計基還記得嘛~~負數怎麽來的

(正數二進制,取反,+1(為什麽這樣呢?因為計算機不擅長減法,所以把負數處理成補數,使得相減就等於他們的補數相加;而一個數的正負數取反相加是11111111...再+1才等於0,所以要+1))

逆過程,-1,取反

1111 1111 1111 1111 1111 1111 1111 0001 --> 0000 0000 0000 0000 0000 0000 0000 1111

----》15 ----》當然因為是個負數,最終結果是-15)

~14; //-15

5.<<(有符號左移)

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

num<<n相當於num乘以2的次方

var num = 5; // 二進制111
num << 3; //
二進制111000,十進制40

6.>>(有符號右移)

num>>n相當於num除以2的次方

(64).toString(2)  //"1000000"
(64>>3).toString(2)  //"1000",十進制8

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

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

var num = -64;       //11111111111111111111111111000000
(num >>> 5).toString(2); //"111111111111111111111111110",十進制134217726

js位操作