大多數語言都提供了按位運算子,恰當的使用按位運算子有時候會取得的很好的效果。
在我看來按位運算子應該有7個:
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
2、| 按位或
|運算子跟&的區別在於如果對應的位中任乙個運算元為1 那麼結果就是1。
1的二進位制表示為 0 0 0 0 0 0 1
3的二進位制表示為 0 0 0 0 0 1 1
所以 1 | 3的結果為3
3、^ 按位異或
^運算子跟|類似,但有一點不同的是 如果兩個操作位都為1的話,結果產生0。
1的二進位制表示為 0 0 0 0 0 0 1
3的二進位制表示為 0 0 0 0 0 1 1
所以 1 ^ 3的結果為2
4、~ 按位非
~運算子是對位求反,1變0,0變1,也就是求二進位制的反碼
1的二進位制表示為 0 0 0 0 0 0 1
所以 ~1 的結果是-2
5、>> 右移
運算子使指定值的二進位制所有位都右移規定的次數,對於其移動規則只需記住符號位不變,左邊補上符號位即按二進位制形式把所有的數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數補1。
1的二進位制表示為 0 0 0 0 0 0 1
所以 1>>1的結果為0
6、<< 左移
《運算子使指定值的二進位制所有位都左移規定的次數,對於其移動規則只需記住丟棄最高位,0補最低位即按二進位制形式把所有的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。
1的二進位制表示為 0 0 0 0 0 0 1
所以 1<<1的結果為2 7、>>> 無符號右移
運算子忽略了符號位擴充套件,0補最高位,但是只是對32位和64位的值有意義。
位運算子在js中的妙用:
1、使用&運算子判斷乙個數的奇偶
偶數 & 1 = 0
奇數 & 1 = 1
那麼0&1=0,1&1=1
2、使用~~,>>,<<,>>>,|來取整
~~3.14 = 3
3.14 >> 0 = 3
3.14 << 0 = 3 3.14 | 0 = 3 3.14 >>> 0 = 3(>>>不可對負數取整)
注意:~~-3.14 = -3 其它的一樣
3、使用<<,>>來計算乘除
乘法:1*2 = 2
1<>1 = 1(2/2的一次方)
4、利用^來完成比較兩個數是否相等
1 ^ 1 = 0
1 ^ 非1數 !=0
所以同乙個數……同乙個數等於0,否則不等於0
5、使用^來完成值交換
a = 1
b = 2
a ^= b
b ^= a
a ^= b
結果a=2,b=1
6、使用&,>>,|來完成rgb值和16進製制顏色值之間的轉換
16進製制顏色值轉rgb:
function hextorgb(hex)
rgb轉16進製制顏色值:
function rgbtohex(rgb)
執行hextorgb(「#ffffff」)返回」rgb(255,255,255)」
執行rgbtohex(「rgb(255,255,255)」)返回」#ffffff」
js中 按位非 運算子妙用
某個數值的按位非操作,可以簡單的理解為該值取負值後減1 例如 5 5 1 6 5 5 1 4 4 4 1 5 複製 二進位制數的負數是取該二進位制數的補碼,然後 1。二進位制數,最高位為0表示正數,最高位為1表示負數。最高位分不同情況儲存不一樣 5的二進位制表示 00000101 假設最高位為8位 ...
按位運算子
基本運算子 按位與運算子,可以對變數s的特定位清零,這時可以設定乙個變數mask,將mask中的特定位賦值為0,其他位置為1,然後作運算 s s mask 即可特定位清零。使用按位與運算,可以取變數s的指定位的值,這時可以設定乙個變數mask,將mask中的指定位賦值為1,其他位置賦值為0,然後作運...
按位運算子
1.按位取反或者二進位制補碼 把1變為0,把0變為1 2.按位與 任何位與0組合都為0,任何位與1組合都為本身 應用 關閉位 清空位 需要開啟乙個值中的特定位,同時保持其他位不變 所有位為0 把1變為0,其餘位不變。假設有乙個二進位制數00011010 從左到右的第4位1表示開關,現在要關閉開關 置...