JAVA 中的位運算

2021-03-31 11:02:23 字數 2017 閱讀 9027

移位運算子

包括:「>> 右移」;「<< 左移」;「>>> 無符號右移」

例子:-5>>3=-1

1111 1111 1111 1111 1111 1111 1111 1011

1111 1111 1111 1111 1111 1111 1111 1111

其結果與 math.floor((double)-5/(2*2*2)) 完全相同。

負數右移高位補1

-5<<3=-40

1111 1111 1111 1111 1111 1111 1111 1011

1111 1111 1111 1111 1111 1111 1101 1000

其結果與 -5*2*2*2 完全相同。

負數左移低位補0

5>>3=0

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 0000

其結果與 5/(2*2*2) 完全相同。

正數右移高位補0

5<<3=40

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0010 1000

其結果與 5*2*2*2 完全相同。

正數左移低位補0

-5>>>3=536870911     

1111 1111 1111 1111 1111 1111 1111 1011

0001 1111 1111 1111 1111 1111 1111 1111

無符號右移高位補0

無論正數、負數,它們的右移、左移、無符號右移 32 位都是其本身,比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5。

乙個有趣的現象是,把 1 左移 31 位再右移 31 位,其結果為 -1。

0000 0000 0000 0000 0000 0000 0000 0001

1000 0000 0000 0000 0000 0000 0000 0000

1111 1111 1111 1111 1111 1111 1111 1111

位邏輯運算子

包括:& 與;| 或;~ 非(也叫做求反);^ 異或

「& 與」、「| 或」、「~ 非」是基本邏輯運算,由此可以演變出「與非」、「或非」、「與或非」復合邏輯運算。「^ 異或」是一種特殊的邏輯運算,對它求反可以得到「同或」,所以「同或」邏輯也叫「異或非」邏輯。

例子:5&3=1

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 0011

0000 0000 0000 0000 0000 0000 0000 0001

-5&3=1

1111 1111 1111 1111 1111 1111 1111 1011

0000 0000 0000 0000 0000 0000 0000 0011

0000 0000 0000 0000 0000 0000 0000 0011

5|3=7

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 0011

0000 0000 0000 0000 0000 0000 0000 0111

-5|3=-5

1111 1111 1111 1111 1111 1111 1111 1011

0000 0000 0000 0000 0000 0000 0000 0011

1111 1111 1111 1111 1111 1111 1111 1011

~5=-6

0000 0000 0000 0000 0000 0000 0000 0101

1111 1111 1111 1111 1111 1111 1111 1010

Java 中的位運算

移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2 2 2 完全相同。5 3 ...

Java 中的位運算

計算機中的原碼 反碼和補碼 移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2...

Java 中的位運算

移位運算子 包括 右移 左移 無符號右移 例子 5 3 1 1111 1111 1111 1111 1111 1111 1111 1011 1111 1111 1111 1111 1111 1111 1111 1111 其結果與 math.floor double 5 2 2 2 完全相同。5 3 ...