1. 程式人生 > >2018.11.22正攻java第三天

2018.11.22正攻java第三天

今天學的運算子,其實挺好理解的。

邏輯運算子:

& 與 並且,兩者都為true才能為true。
| 或,兩者中只要有一個true就為true。
^ 異或,兩邊不同為true,相同為false。
&& 短路與,從第一個開始只要找到一個false後面直接短路(跳過,不執行。)
|| 短路或,從第一個開始只要找到一個true後面直接短路(跳過,不執行。)

位運算子(一):

& 按位與(有0則0):
int x = 3,y = 4; int a = 3 & 4;
3 = 011
4 = 100
& = 000
| 按位或(有1則1):
int b = 4 | 5 ;
b = 100
5 = 101
| = 101
^ 按異位或(相同則0,不同則1)
int c = 4^ 5 int c = 4^ 5^5 (一個數被同一個數異或2次,值不變)


4=100 4=100
5=101 5=101
^=001 ^=001
5=101
^=100
~按位取反(高位也會被取反,需要補碼進行運算)
int d = ~6;
6=0…0110 補碼(正數的原 反 補相同)
1…1001 補碼(取反)
1…1000 反碼(減1)
1…0111 原碼(取反)

位運算(二):

<< 左移
向左移幾位,就是乘以2的幾次冪,
最高為是0,右邊補齊0.最高為是1,右邊補齊1。
int e=8<<2;
8=0…01000
=0…100000
>>右移
向右移幾位,就是除以2的幾次冪,
最高位是0,左邊補齊0.最高為是1,左邊補齊1.
int g=11>>2;
11=0…01011
=0…0010
>>> 無符號右移(無論最高為是0還是1.左補齊0)