首頁  >  文章  >  web前端  >  JavaScript位元運算子的應用簡析_javascript技巧

JavaScript位元運算子的應用簡析_javascript技巧

WBOY
WBOY原創
2016-05-16 17:01:341230瀏覽

大多數語言都提供了位元運算符,位元運算符在c,c 等語言中運用廣泛,而在JS,AS等腳本語言中則沒有太多的應用例子,有時候,適當的使用位元運算子會取得很好的效果。
以下根據自己的認知簡單的談一下js中的位元操作使用(同樣適用於其他語言),如果有錯誤,歡迎指正。

位元運算子是把運算元看成一系列單獨的位,而不是一個數字值。所以在這之前,不得不提到什麼是「位元」:
數值或字元在記憶體內都是被儲存為0和1的序列,每個0和1被稱之為1個位元,比如說10進位資料2在電腦內被儲存為0 0 0 0 0 0 1 0,當我們將記憶體內的位值改變之後,這個值代表的意義也變了,例如把2前移動一位, 現在儲存單元裡面變成了0 0 0 0 0 1 0 0,這個值表示的是十進位的4,這也就是位元運算子的運算原理。

位元運算子有6個
& 位元與
|位元或
^位元異或
~取反
>>右移


1 & 運算子
&是二元運算符,它以特定的方式的方式組合操作數中對應的位如果對應的位都為1,那麼結果就是1, 如果任一個位是0 則結果就是0
1 & 3的結果為1
來看看它的怎麼運行的:
1的二進位表示為0 0 0 0 0 0 1
3的二進制表示為0 0 0 0 0 1 1
根據& 的規則得到的結果為0 0 0 0 0 0 0 1,十進位表示就是1

只要任何一位是0 &運算的結果就是0,所以可以用&把某個變數不必要的位元設為0, 例如某個變數的二進位表示為0 1 0 0 1 0 0 1, 我想保留低4位,消除高4位用& 0x0F就可以了(住:0x0F為16進位表示法,對應的二進位為0 0 0 0 1 1 1 1),這個特性有個很重要的應用,在後面會提到。

2 | 運算子
| 跟 & 的差別在於 如果對應的位元中任一個操作數為1 那麼結果就是1
1 | 3 的結果為3

3 ^ 運算子
^運算子跟| 類似,但有一點不同的是如果兩個操作位都為1的話,結果產生0
0 1 0 0 0 0 0 1
0 1 0 1 1 0 1 0
產生0 0 0 1 1 0 1 1

4 ~ 運算子
~是對位求反 1變0, 0變1

5 移位運算子移位運算子把位元以指定的值向左或向右移動
> 向右移動,超過的位元將會遺失,而空出的位元則補0

如0 1 0 0 0 0 0 0 0 0 0 0 0 1 1(十進制16387) 向左移動兩位將變成
0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 (十進位12)
向右移動兩位則是
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0(十進位4096)


以下介紹一些具體的應用
前面提到2向前移動1位變成4 利用這個特性可以做乘法運算
2 3 4 同理>> 則可以做除法運算


任何小數 把它 >> 0可以取整
如3.14159 >> 0 = 3;

^運算服有個神奇的特性
如以下程式碼

複製程式碼 程式碼如下:

<script><BR>var n1 = 3<var n1 = 3<BR>var n2 = 4;<BR>n1 ^= n2;<BR>n2 ^= n1;<BR>n1 ^= n2;<BR></script>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn