Java 中的位運算與移位運算詳解

位運算

按位“與” &

規則: 如果兩個相應的二進制形式的對應的位數都為 1,則結果為 1;否則為 0;

4 & 5

4

0000 0100

5

0000 0101

按位與運算

&

4 & 5 = 4

0000 0100

1 * 2^2 = 4

-4 & 5

-4

1111 1100

5

0000 0101

按位與運算

&

規則:運算結果符號位是1,為負數, 需要減 1,再取反(其他運算也要遵循)

-4 & 5 = 4

0000 0100

1 * 2^2 = -4

1.正數直接取二進制運算

2.負數取反加一得補碼再運算,得到的結果符號位為 0,不需要做任何操作直接給出結果

按位“或” |

規則: 有 1 為 1;否則為 0;

4 | 5

4

0000 0100

5

0000 0101

按位或運算

|

4 | 5 = 5

0000 0101

1 * 2^0 + 1 * 2^2 = 5

-4 | 5

-4

1111 1100

5

0000 0101

按位或運算

|

規則:運算結果符號位是1,為負數, 需要減 1,再取反(其他運算也要遵循)

-4 | 5 =

1111 1101

減1

1111 1100

取反

-0000 0011

-4 | 5 = -3

1 * 2^0 + 1 * 2^1 = -3

異或 ^

規則: 相同為 0;不同為 1;

4 ^ 5

4

0000 0100

5

0000 0101

按位異或運算

^

4 ^ 5 = 1

0000 0001

1 * 2^0 = 1

-4 ^ 5

-4

1111 1100

5

0000 0101

按位異或運算

^

規則:運算結果符號位是1,為負數, 需要減 1,再取反(其他運算也要遵循)

-4 ^ 5 =

1111 1001

減1

1111 1000

取反

-0000 0111

-4 ^ 5 = -7

1 * 2^0 + 1 * 2^1 + 1 * 2^2 = -7

移位運算

左移 <<

規則: 右邊空出的位用 0 填補高位,左移溢出則舍棄該高位。

8 << 2

8

0000 1000

<< 2

0010 0000

左移運算符

<<

結果

8 << 2 = 32

1 * 2^5 = 32

-8 << 2

-8

1111 1000

<< 2

1110 0000

左移運算

<<

規則:運算結果符號位是1,為負數, 需要減 1,再取反(其他運算也要遵循)

減1

1101 1111

取反

-0010 0000

-8 << 2 = -32

1 * 2^5 = -32

右移 >>

規則: 左邊空出的位正數用 0 負數 1 填補,右移溢出則舍棄該低位。

8 >> 2

8

0000 1000

>> 2

0000 0010

左移運算符

>>

結果

8 >> 2 = 2

1 * 2^1 = 2

-8 >> 2

-8

1111 1000

>> 2

1111 1110

左移運算

>>

規則:運算結果符號位是1,為負數, 需要減 1,再取反(其他運算也要遵循)

減1

1111 1101

取反

-0000 0010

-8 >> 2 = -2

1 * 2^1 = -2

無符號右移 >>>

規則: 正數與右移規則一樣;負數無符號右移,在高位補 0

8 >>> 2

8

0000 1000

>> 2

0000 0010

無符號右移運算符

>>>

結果

8 >>> 2 = 2

1 * 2^1 = 2

-8 >>> 2

-8

1111 1111 1111 1111 1111 1111 1111 1000

>>> 2

0011 1111 1111 1111 1111 1111 1111 1110

無符號右移運算符

>>>

規則:運算結果符號位是1,為負數, 需要減 1,再取反(其他運算也要遵循)

減1

取反

-8 >>> 2 = 1073741822

1073741822

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: