JavaScript按位運算符的應(yīng)用簡析
大多數(shù)語言都提供了按位運算符,按位運算符在c,c++等語言中運用廣泛,而在JS,AS等腳本語言中則沒有太多的應(yīng)用例子,有時候,適當?shù)氖褂冒次贿\算符會取得很好的效果。
下面根據(jù)自己的認知簡單的談一下js中的位操作使用(同樣適用于其他語言),如果有錯誤,歡迎指正。
按位運算符是把操作數(shù)看作一系列單獨的位,而不是一個數(shù)字值。所以在這之前,不得不提到什么是“位”:
數(shù)值或字符在內(nèi)存內(nèi)都是被存儲為0和1的序列,每個0和1被稱之為1個位,比如說10進制數(shù)據(jù)2在計算機內(nèi)被存儲為 0 0 0 0 0 0 1 0,當我們將內(nèi)存內(nèi)的位值改變之后,這個值代表的意義也就變了,比如把2前移動一位, 現(xiàn)在存儲單元里面變成了0 0 0 0 0 1 0 0,這個值表示的是十進制的4,這也就是按位操作符的運算原理。
按位運算符有6個
& 按位與
|按位或
^按位異或
~取反
>>右移
<<左移
1 & 運算符
&是二元運算符,它以特定的方式的方式組合操作數(shù)中對應(yīng)的位 如果對應(yīng)的位都為1,那么結(jié)果就是1, 如果任意一個位是0 則結(jié)果就是0
1 & 3的結(jié)果為1
來看看它的怎么運行的:
1的二進制表示為 0 0 0 0 0 0 1
3的二進制表示為 0 0 0 0 0 1 1
根據(jù) & 的規(guī)則 得到的結(jié)果為 0 0 0 0 0 0 0 1,十進制表示就是1
只要任何一位是0 &運算的結(jié)果就是 0,所以可以用&把某個變量不必要的位設(shè)為0, 比如某個變量的二進制表示為 0 1 0 0 1 0 0 1, 我想保留低4位,消除高4位 用 & 0x0F就可以了(?。?x0F為16進制表示法,對應(yīng)的二進制為 0 0 0 0 1 1 1 1),這個特性有個很重要的應(yīng)用,在后面會提到。
2 | 運算符
| 跟 & 的區(qū)別在于 如果對應(yīng)的位中任一個操作數(shù)為1 那么結(jié)果就是1
1 | 3 的結(jié)果為3
3 ^ 運算符
^運算符跟 | 類似,但有一點不同的是 如果兩個操作位都為1的話,結(jié)果產(chǎn)生0
0 1 0 0 0 0 0 1
0 1 0 1 1 0 1 0
產(chǎn)生 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)
下面介紹一些具體的應(yīng)用
前面提到2向前移動1位變成4 利用這個特性可以做乘法運算
2 << 1 =4
3 << 1 = 6
4 << 1 = 8
同理 >> 則可以做除法運算
任何小數(shù) 把它 >> 0可以取整
如3.14159 >> 0 = 3;
^運算服有個神奇的特性
如以下代碼
<script>
var n1 = 3;
var n2 = 4;
n1 ^= n2;
n2 ^= n1;
n1 ^= n2;
</script>
相關(guān)文章
JS檢索下拉列表框中被選項目的索引號(selectedIndex)
這篇文章主要介紹了JS檢索下拉列表框中被選項目的索引號(selectedIndex),本文通過實例代碼圖文詳解的形式給大家介紹的非常詳細,需要的朋友可以參考下2019-12-12html的DOM中document對象images集合用法實例
這篇文章主要介紹了html的DOM中document對象images集合用法,實例分析了images集合的語法與使用技巧,需要的朋友可以參考下2015-01-01JavaScript蒙板(model)功能的簡單實現(xiàn)代碼
本文給大家介紹JavaScript蒙板(model)功能的簡單實現(xiàn)代碼,創(chuàng)建一個蒙板, 設(shè)置蒙板的堆疊順序保證能將其它元素蓋住,感興趣的朋友可以參考下實現(xiàn)代碼2016-08-08document.body.scrollTop 值總為0的解決方法 比較常見的標準問題
頁面具有 DTD(或者說指定了 DOCTYPE)時,使用 document.documentElement。2009-11-11JS遍歷JSON數(shù)組及獲取JSON數(shù)組長度操作示例【測試可用】
這篇文章主要介紹了JS遍歷JSON數(shù)組及獲取JSON數(shù)組長度操作,涉及javascript簡單json數(shù)組遍歷與運算相關(guān)操作技巧,需要的朋友可以參考下2018-12-12Js參數(shù)RSA加密傳輸之jsencrypt.js的使用
這篇文章主要介紹了Js參數(shù)RSA加密傳輸之jsencrypt.js的使用,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02