Java &、&&、|、||、^、<<、>>、~、>>>等運算符
- 2019 年 10 月 29 日
- 筆記
Java運算符大致分為邏輯運算符(&&,||,!)、算數運算符(+, -, *, / ,+=)、位運算符(^,|,&)、其他運算符(三元運算符)
&(按位與)

&按位與的運算規則是將兩邊的數轉換為二進位位,然後運算最終值,運算規則即(兩個為真才為真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0 3的二進位位是0000 0011 , 5的二進位位是0000 0101 , 那麼就是011 & 101,由按位與運算規則得知,001 & 101等於0000 0001,最終值為1 7的二進位位是0000 0111,那就是111 & 101等於101,也就是0000 0101,故值為5
&&(邏輯與)

&&邏輯與也稱為短路邏輯與,先運算&&左邊的表達式,一旦為假,後續不管多少表達式,均不再計算,一個為真,再計算右邊的表達式,兩個為真才為真。
|(按位或)

|按位或和&按位與計算方式都是轉換二進位再計算,不同的是運算規則(一個為真即為真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1 6的二進位位0000 0110 , 2的二進位位0000 0010 , 110|010為110,最終值0000 0110,故6|2等於6
||(邏輯或)

邏輯或||的運算規則是一個為真即為真,後續不再計算,一個為假再計算右邊的表達式。
^(異或運算符)

^異或運算符顧名思義,異就是不同,其運算規則為1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0 5的二進位位是0000 0101 , 9的二進位位是0000 1001,也就是0101 ^ 1001,結果為1100 , 00001100的十進位位是12
<<(左移運算符)

5<<2的意思為5的二進位位往左挪兩位,右邊補0,5的二進位位是0000 0101 , 就是把有效值101往左挪兩位就是0001 0100 ,正數左邊第一位補0,負數補1,等於乘於2的n次方,十進位位是20
>>(右移運算符)

凡位運算符都是把值先轉換成二進位再進行後續的處理,5的二進位位是0000 0101,右移兩位就是把101左移後為0000 0001,正數左邊第一位補0,負數補1,等於除於2的n次方,結果為1
~(取反運算符)

取反就是1為0,0為1,5的二進位位是0000 0101,取反後為1111 1010,值為-6
>>>(無符號右移運算符)

無符號右移運算符和右移運算符的主要區別在於負數的計算,因為無符號右移是高位補0,移多少位補多少個0。
15的二進位位是0000 1111 , 右移2位0000 0011,結果為3

-6的二進位是6的二進位取反再加1,6的二進位也就是0000 0000 0000 0000 0000 0000 0000 0110,取反後加1為1111 1111 1111 1111 1111 1111 1111 1010,右移三位0001 1111 1111 1111 1111 1111 1111 1111

作者:MarkRao尋道 來源:https://www.jianshu.com/p/8cf5af30f245

