Java 中的位運算

2021-06-01 01:07:21 字數 2375 閱讀 5003

計算機中的原碼、反碼和補碼:

移位運算子

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

例子:-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=-40

1111 1111 1111 1111 1111 1111 1111 1011

1111 1111 1111 1111 1111 1111 1101 1000

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

5>>3=0

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 0000

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

5<<3=40

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0010 1000

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

-5>>>3=536870911     

1111 1111 1111 1111 1111 1111 1111 1011

0001 1111 1111 1111 1111 1111 1111 1111

無論正數、負數,它們的右移、左移、無符號右移 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=3

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

~-5=4

1111 1111 1111 1111 1111 1111 1111 1011

0000 0000 0000 0000 0000 0000 0000 0100

5^3=6

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0000 0011

0000 0000 0000 0000 0000 0000 0000 0110

-5^3=-8

1111 1111 1111 1111 1111 1111 1111 1011

0000 0000 0000 0000 0000 0000 0000 0011

1111 1111 1111 1111 1111 1111 1111 1000

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 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 2 2 完全相同。負數右移...