短路原則
-
JAVA 中的邏輯運算符
圖來自菜鳥教程
-
短路原則
即是在Java中如果執行該邏輯判斷時能夠判斷整條語句的正確了那就不執行後面的語句了
int index=5;
System.out.println((5==5)||(++index==5));
System.out.println(index);
System.out.println((5==6)&&(++index==6));
System.out.println(index);
輸出:
位運算
二元操作符:
左移( << )、右移( >> ) 、無符號右移( >>> ) 、位與( & ) 、位或( | )、位異或( ^ )
一元運算符:
位非( ~ )
二元運算符即是左右兩邊都要有 變量(已賦值)/常量
-
左移(<<)
- Java中整數默認是int型(默認是指如System.out.print(3);這種未定義類型),所以佔4個字節,有32位
3<<2
即是指將3轉爲二進制:
0000 0000 0000 0000 0000 0000 0000 0011
11後左移兩位即是1100
0000 0000 0000 0000 0000 0000 0000 1100
轉化爲十進制爲12,(常常感覺就是乘了2的幾次方)
-
右移(<<)
- 與左移不同的是右移是高位補零
所以如果是7<<2的話,7的二進制是
0000 0000 0000 0000 0000 0000 0000 0111
右移兩位(高位補零):
0000 0000 0000 0000 0000 0000 0000 0001
即爲1
-
無符號右移(>>>)
在我們的計算機中,機器數的二進制序列中,最高位代表的是正負,0則正,1則負 所以對於int型,其佔有四個字節,32位,所以其大小範圍爲[-2^31^,2^31^-1]
在此先來回顧一下我們學到的原碼,反碼,補碼
正數的原,反,補是一樣的,下面只說負數
-
原碼
負數的原碼:如-7,在一個字節表示下爲
1000 0111
-
反碼
反碼是在原碼的基礎上符號位不變,其餘位取反
即在一個字節表示下,-7的反碼爲:
1111 1000
-
反碼
反碼是在補碼的基礎上加1
即在一個字節表示下,-7的補碼爲:
1111 1001
-
所以無符號右移(>>>)是什麼意思呢?
從無符號上即可以認爲該主要針對負數,對於正數無符號與有符號右移是一樣的,而負數就不一樣了。
例如在Java中,將-5(默認爲int型)轉換爲二進制爲:
1111 1111 1111 1111 1111 1111 1111 1011
System.out.println(Integer.toBinaryString(-5));
輸出:
- 怎麼來的?
負數在計算機中是以補碼的形式存儲的
得到了-5在計算中的二進制碼之後,無符號後移三位即是,前面補“0”,所以-5>>>3
即得到二進制序列爲:
0001 1111 1111 1111 1111 1111 1111 1111
轉爲十進制爲:536870911
System.out.println(Integer.toBinaryString(-5)); System.out.println(Integer.toBinaryString(-5>>>3)); System.out.println(-5>>>3); System.out.println(-5>>3);
輸出:
-
-
位與(&)
運算規則:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即是離散數學中同爲真才爲真不多說,上實測例子:
System.out.printf("-1的二進制碼爲:%s%n",Integer.toBinaryString(-1)); System.out.printf("9的二進制碼爲:%s%n",Integer.toBinaryString(9)); System.out.printf("12的二進制碼爲:%s%n",Integer.toBinaryString(12)); System.out.println("9&-1的值爲"+(9&-1)); System.out.println("9&12的值爲"+(9&12)); System.out.println("9&0的值爲"+(9&0)); System.out.println("9&1的值爲"+(9&1));
輸出:
同理其他三個也是一樣,這裏就不一一說明了,結合布爾運算就很好記住了
- 位或( | )
有“ 1”得“1”
- 位移或( ^ )
不同爲“1”
- 位非( ~ )
取反就是
測試
System.out.println(~9==(-10));//輸出true
位運算符的組合
如:&= 按位與賦值
|= 按位或賦值
^= 按位非賦值
>>= 右移賦值
>>>= 無符號右移賦值
<<= 賦值左移
本文可參考鏈接: