1. 程式人生 > 其它 >Java----邏輯運算子,位運算子

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

到這裡大家是不是明白了位運算的運算方式了!