位移運算子

2021-09-26 01:56:09 字數 2402 閱讀 2446

位移運算子  直接操作二進位制數,運算速率更快。
按位非(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 左移運算子,向左移動由右...