Java----邏輯運算子,位運算子
邏輯運算子:
&&(且或者與):邏輯與運算:兩個變數都為真,結果就為真,也就是true,反之,只要有一個為假那麼結果就是假,也就是false
||(或):兩個變數只要有一個為真,那麼結果就是真,也就是true
!(非):邏輯非運算:如果為真則非真為假,如果為家則非假為真。
接下我們測試一下邏輯運算子:
import java.util.Arrays; public class MyJava { public static void main(String[] args) { boolean a=true;boolean b=false; System.out.println("a&&b="+(a&&b)); //邏輯與運算:兩個變數都為真,結果就為真,也就是true,反之,只要有一個為假那麼結果就是假,也就是false System.out.println("a||b="+(a||b)); //邏輯或運算:兩個變數只要有一個為真,那麼結果就是真,也就是true System.out.println("!a&&b="+(!a&&b));//邏輯非運算:如果為真則非真為假,如果為家則非假為真。 } }
上面也就是邏輯運算的基本用法了!
接下來我們要講一下位運算了,這個有點難理解了。
位運算子:&(與),|(或),^(非),~(取反),>>(右移),<<(左移),>>>(只要瞭解就行)
我們知道位一般都是二進位制數字:例如
數字0表示 : 0000 0000
數字1表示:0000 0001
數字2表示: 0000 0010
數字3表示: 0000 0011 .......
數字8表示: 0000 1000
那麼他們到底是如何換算的呢:舉個例子
上面8表示的位是:0000 1000 為什麼等於8 因為這個位數是二進位制的 所以 8= 0^(8-1)+0^(7-1)+0^(6-1)+0^(5-1)+2^(4-1)+0^(3-1)+0^(2-1)+0^(1-1)=8
看上去好像還是糊裡糊吧!我做個圖大家估計都明白怎末回事了:
注意出現1和0 ,我查了一下到底什麼意思,大概意思就是 1表示開,0表示關,也就是所謂的真或者假,true或者false
出現true表示1 ,因為位是二進位制 所以換算成十進位制為:2^(4-1)=2^3=8 如果是0的話表示false,所以就是0的多少次方。
通過上面的解釋應該都知道十進位制數和二進位制數的轉換了吧
接下來我們定義:
A= 0000 1100
B= 1100 0101
A&B=0000 0100
同理:
~B=0011 1010 (對B進行取反 也就是原來0變成1,原來1變成0)
下面又一個問題來了:
2*4=8 如何運算最快?
8是不是等於 2*2*2 ,大學的時候相信都學過一門課叫做計算機組成原理,都上過實驗課吧! 無非就是遇到1燈亮,0燈滅嗎。哈哈哈 ! 我們現在學的語言都是從底層一點一點封裝起來的,我們從底層實現顯然是最快的了。
想一下如果我將2向做移動2為會得到上面結果?
那麼我們就通過程式碼測試一下:
import java.util.Arrays; public class MyJava { public static void main(String[] args) { System.out.println(2<<2);//左移 System.out.println(2>>1);//右移 } }
測試的結果是2左移2位是8,右移1位是1.
那到底是怎末做的呢?
首先 我們知道 2的位數是 0000 0010 向左移動2位是:0000 1000 二進位制轉換成十進位制是:0^(8-1)+0^(7-1)+0^(6-1)+0^(5-1)+2^(4-1)+0^(3-1)+0^(2-1)+0^(1-1)=8
同理向左移動一位是: 0000 0001 二進位制轉換成十進位制是:0^(8-1)+0^(7-1)+0^(6-1)+0^(5-1)+0^(4-1)+0^(3-1)+0^(2-1)+2^(1-1)=2^0=1
到這裡大家是不是明白了位運算的運算方式了!