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

ps:>> << ~有時候會用來取整

一般我們取整會用以下這些方式其中一種:

parseInt(1.5) //1
Math.round(1.5) //2
Math.floor(1.5) //1
Math.ceil(1.5) //2

但是有時候我們想追求更高的性能,我們會考慮用位運算來取整:

1.5>>0 //1
1.5<<0 //1
~~1.5 //1

參與 位運算 的操作數都會先對其進行抽象的 ToInt32 操作,上面3種操作都沒有實質對數字進行什么位運算,只是利用了它先對數字進行ToInt32操作的特性(因為ToInt32操作js沒有提供方法接口)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM