位移運算子 直接操作二進位制數,運算速率更快。
按位非(not) 把1變成0,把0變成1 超出運算範圍,變成負數
var a=25; var b=~a; b=?
25的 二進位制數:00000000000011001
轉化後: 11111111111100010
結果為:-26
總結非運算:乙個數與自身的取反值相加等於-1。此例中 25 與它的取反值-26 相加得1.
2)按位與&(and) 都為1得1,都為0得0,不同得0
var a=25 ; var b=a&3 b=??
25的 二進位制數:00000000000011001
3的二進位制數 :00000000000000011
結果:00001 結果為:1
與運算(&):兩個二進位制位中都為1,才返回1,否則返回0
3)按位或 | (or) 都為1得1,都為0得0,不同得1
var a=25 ; var b=a|3 b=??
25的 二進位制數:00000000000011001
3的二進位制數 :00000000000000011
結果:11011 結果為: 27
或運算(|):兩個二進位制位中只要有乙個為1,就返回1,否則返回0
4)按位異或(xor) 都為1得0,都為0得0,不同得1
var a=25 ; var b=a|3 b=??
25的 二進位制數:00000000000011001
3的二進位制數 :00000000000000011
結果:11010 結果為:26
5)左移 << 負數運算操作補碼 符號位不移動
左移:將乙個數的二進位制值向左移動指定的位數,尾數補0,即乘以2的指定次方(符號位不參與移動)。
例如1:
var a=2 ; var b=a<<5 b=??
2的進製數:00000000000000000000010
移走5位 : 000000000000000010
結果:64
例如2:
console.log(4 << 1); //8
//4的二進位制形式為100,左移一位相當於1000,即十進位制的8,相當於乘以2的1次方
console.log(-4 << 1); //-8 此例操作的負數的補碼。用原碼更簡單
//-4的二進位制形式是11111111111111111111111111111100(4的二進位制形式減1再取反)
,左移一位得到11111111111111111111111111111000,
轉換為十進位制得到-8(減1後再取反)
6)右移 >> 負數運算操作 符號位不移動
右移:將乙個數的二進位制值向右移動指定位數,頭部補0,即除以2的指定次方(符號位不參與移動)。
例如:var a=64 ; var b=a>>5 b=??
64的進製數:000000000000000010
移走5位 : 00000000000000000000010
結果:2
右移就是:尾部刪掉,符號為不變,前面0補齊。
console.log(4 >> 1); //2
console.log(-4 >> 1); //-2
7)無符號右移 >>> 尾數刪掉0,前面補齊0符號位也移動所以總得到正值
無符號右移:該運算子表示將乙個數的二進位制形式向右移動,包括符號位也參與移動,頭部補0,所以該運算總是得到正值。對於正數,該運算的結果與右移運算子(>>)完全一致,區別主要在於負數。
例子1:
var a=-64 ; var b=a>>>5 b=??
-64的進製數:11111111111111111111110
移走5位 : 00000011111111111111111111110
結果:134217726
整體右移,多餘捨掉(符號位的1也捨掉)。前面用0補齊。
例子2:
console.log(-4 >>> 1); //2147483646
因為-4的二進位制形式為11111111111111111111111111111100 整體右移一位,得到
01111111111111111111111111111110 ,轉換為十進位制得到2147483646。
檢視乙個負整數在計算機內部的儲存形式,最快的方法就是使用這個運算子。
console.log(-1 >>> 0); //4294967295
上面**表示,-1作為32位整數時,內部的儲存形式使用無符號整數格式解讀,值為4294967295(換為二進位制為11111111111111111111111111111111)
共同學習,如果有問題,希望大家多多指正。
java 位移運算子
import org.junit.test 1 左移運算子 2 右移運算子 測試正數 3 右移運算子 測試負數 4 無符號右移 測試正數 5 無符號右移 測試負數 public class weiyitest 右移運算子 測試正數 1010001001 test public void test2 ...
c 位移運算子
左移運算子 將第乙個運算元向左移動第二個運算元指定的位數,空出的位置補0。例如 1100100 2 110010000,1100100左移兩位後為 1100100口口,補0後為110010000。右移運算子 將第乙個運算元向右移動第二個運算元所指定的位數,空出的位置補0。例如 1100100 2 0...
Java位移運算子原理
總體概念 1.位移運算子只對位進行操作 2.只能操作int整型資料型別 3.右移補高位,左移補底位 有正負之分的右位移運算子,把位元組向右移由右邊運算元指定的位數,如果左邊運算元是正數,則移動的高位補0 反之則補1 無符號之分的右移運算子,即不管左邊運算元的正負,高位都補0 左移運算子,向左移動由右...