&和&&在邏輯運算子中都是用於連線兩個boolean表示式,兩邊都為true則整體為true,兩邊只要有一邊為false則輸出false,區別在於:
&&具有短路功能,即當第乙個boolean表示式為false時,就不往下判斷第二個表示式,而&在第乙個表示式為false的情況下,仍會去判斷第二個表示式的真假。例如,對於if(str != null && !str.equals(「」))表示式,當str為null時,後面的表示式不會執行,所以不會出現nullpointerexception,但如果將&&改為&,則會丟擲nullpointerexception異常。
&還可用作位運算子,表示按位與操作,兩個數進行&運算時,它們的二進位制值與操作的結果只有同一bit位上的值都為1時結果才為1,否則為0,比如128&129=128,128的二進位制是10000000,129的二進位制是10000001,&後的結果是10000000,即128,,&操作經常用於獲取乙個數的高四位bit或者低四位bit,0x31 & 0x0f的結果為0x01。
這裡再順便補充下^(異或)運算子:
^在邏輯運算子中用於連線兩個變數/常量,表示相同為false,不同為true,在位運算子中則是表示兩個值相同為0,不同為1,例如 2和2做異或的結果為0,0和4做異或的結果為4,常用於在一串數字中找出唯一個不重複的數字,時間複雜度是o(n),假設乙個陣列中只有乙個重複的數字,遍歷所有的數字做異或操作可留下那唯一乙個。
位運算子和邏輯運算子的區別
一 邏輯運算子和位運算 1 位運算子 按位 與 規則 全一則一,否則為零 清零 按位 或 規則 全零則零,否則為一 按位 非 規則 類似於取反碼 按位 異或 敲黑板 規則 相同為零,不同為一 注釋 這裡講一下位運算子運作交換的語句 異或 x x y y x y x x y 宣告變數不寫了 親測 2 ...
C 中點運算子和箭頭運算子的區別
ps 需要快速看結論的,直接看文末總結歸納,需要理解的可以從文首開始看。p member執行為p offset member 目標的記憶體位址 s.member變成訪問 s offset member 目標的記憶體位址 因此實際上功能完全一致,看起來 p member更加直接一些,只不過s.memb...
C Equals 和運算子 的區別
1.對於值型別 如果物件的值相等,則相等運算子 返回true,否則返回false 2.對於引用型別 equals方法比較的是兩個物件指向的記憶體空間內容是不是相同。也就是比較兩個引用型別是否是對同乙個物件的引用,即兩個物件的內容是否相等。對於string型別,比較字串的值 對於引用型別,操作符類似於...