js位操作
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位操作