邏輯操做符符與按位操做符的這些知識,你必需要知道!

不管什麼時候,都要保持足夠的警戒性。比你聰明的人都在努力,再不動起來,咱們就老了。歡迎你們掃描下方的二維碼關注個人微信公衆號,與我一塊兒學習Java。vue

掃一掃,關注我

溫故知新

上一節,咱們講了Java中的算術操做符、自增自減操做符以及關係操做符,並經過案例進行了相應的說明。請回答如下幾個問題:java

  1. +/-操做符在做爲一元操做符時,它們的做用分別是什麼?
  2. 假設有變量a,那麼a++和++a,其含義有何不一樣?
  3. 關係操做符適用於全部基本數據類型嗎?
  4. 請說說==和equals有什麼異同。

更上一層樓

今天咱們繼續講解Java中操做符的相關知識,主要涉及兩塊的內容:微信

  1. 邏輯操做符
  2. 按位操做符

邏輯操做符

邏輯操做符負責鏈接多個關係表達式,其能根據參數的邏輯關係,生成一個boolean值。邏輯操做符有與(&&)或(||)非(!)。「與」、「或」、「非」只能應用於boolean值,而不能將一個非布爾值看成布爾值在邏輯表達式中使用。markdown

  1. &&操做符表示全部的關係表達式都爲true時才爲true
  2. ||操做符表示只要有一個關係表達式爲true就爲true
  3. !操做符表示取當前的相反量
  4. 邏輯操做符混合使用時,可使用括號()來肯定優先級
public class LogicExp {
  public static void main(String [] args) {
    //&& 全部的關係表達式都爲true時才爲true
    System.out.println(5>3&&5>4);
    System.out.println(5>3&&5>6);
    //|| 只要有一個關係表達式爲true就爲true
    System.out.println(5>3||5>4);
    System.out.println(5>3||5>6);
    //! 取當前的相反量
    System.out.println(5>3);
    System.out.println(!(5>3));
    //混合使用邏輯操做符()內的表達式優先進行運算
    System.out.println((5>6&&5>3) || 5>4);
    System.out.println(5>6 && (5>3||5>4));
  }
}
//output
//true
//false
//true
//true
//true
//false
//true
//false

&&||操做符每每還有短路的做用,短路的做用體如今:好比說&&操做符,若是第一個表達式爲false,那麼它便不會去對第二個表達式進行運算||操做符具備一樣的特性,若是第一個表達式爲true,那麼它便不會去對第二個表達式進行運算app

public class LogicExp {
  public static void main(String [] args) {
    System.out.println("&&短路操做:"+(test3()&&test1()));
    System.out.println("====================================")
    System.out.println("||短路操做:"+(test1()||test2()));
  }
  public static test1() {
    System.out.println("5>3:"+(5>3));
    return (5>3);
  }
  public static test2() {
    System.out.println("5>4:"+(5>4));
    return (5>4);
  }
  public static test3() {
    System.out.println("5>6:"+(5>6));
    return (5>6);
  }
}
//output
//5>6:false
//&&短路操做:false
//====================================
//5>3:true
//||短路操做:true

所以在寫邏輯表達式的時候,把重要判斷的條件表達式放在前面優先判斷,能夠減小沒必要要的運算,從而得到潛在的性能提高。性能

按位操做符

除了Java中的八種基本數據類型外,還有一個比這些基本數據類型還小的單位bit(位),如1 byte = 8 bit。按位操做符就是對這個二進制位進行操做。按位操做符會對兩個參數中對應的位執行布爾(boolean)代數運算(由於二進制位只可能爲0或者爲1),並生成一個boolean結果。學習

按位操做符主要分爲&(按位與)|(按位或)^(按位異或)~(非)四種。ui

  1. &(按位與):若是兩個輸入爲都是1,則生成1,不然生成0。
    假設輸入值的二進制數是下列的輸入值1和輸入值2
    輸入值1:00011010
    輸入值2:00110011
    => 比較後的結果是:00010010
  2. |(按位或):只要兩個輸入位有一個爲1,則生成1;只有兩個輸入位都是0的狀況下才會生成0。
    假設輸入值的二進制數是下列的輸入值1和輸入值2
    輸入值1:00011010
    輸入值2:00110011
    => 比較後的結果是:00111011
  3. ^(按位異或):若是兩個輸出位有且只有一個爲1,則生成1,不然生成0.
    假設輸入值的二進制數是下列的輸入值1和輸入值2
    輸入值1:00011010
    輸入值2:00110011
    => 比較後的結果是:00101001
  4. ~(非):屬於一元操做符,只對一個操做數進行操做,取其相反值。如0的相反值是1。
    假設輸入值的二進制數是下列的輸入值1
    輸入值1:00011010
    => 取反後的結果是:11100101

對於boolean值而言,因爲其做爲一種單bit值,按位操做符具備與邏輯操做符相同的效果,只是其沒有邏輯操做符的短路功能url

每日一結

今天主要講解了邏輯操做符和按位操做符,對boolean類型而言,兩種操做符具備大體相同的邏輯判斷效果,可是也有必定的區別,這是咱們須要謹記的地方。spa

而在使用邏輯操做符時,必定要記得,把優先級高的、更頂層的關係表達式放在前面,這樣可以避免沒必要要的運算,從而必定程度上提升程序性能。

若是以爲我寫的內容對你有幫助,歡迎關注個人微信公衆號:

掃一掃,關注我

相關文章
相關標籤/搜索