Java的位運算

2021-04-26 09:27:28 字數 1232 閱讀 2486

見識乙個應用:

(int)long^(long>>>32)

將long的高位儲存程式設計int

移位運算子

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

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

位邏輯運算子

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

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

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 ...