一、&和&&的區(qū)別。&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。 &&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式。 例如,對于if(str != null && !str.equals(“”))表達式,當str為null時,后面的表達式不會執(zhí)行,所以不會出現(xiàn)NullPointerException如果將&&改為&,則會拋出NullPointerException異常。If(x==33 & ++y>0) y會增長,If(x==33 && ++y>0)不會增長 還可以用作位運算符,&&操作符兩邊的表達式不是boolean類型時,&表示按位與操作。
,我們通常使用0x0f計算
,我們通常使用0x0f計算二、a^b就表示是異或運算。而不是a的b次方,Java中,要表示a的b次方,Math.pow(a,b)。
例 a = 6 a^b<<2,<<優(yōu)先級比^高,所以, b先左移2位(相當于乘以4)再與a異或(兩個值'相同為假,不同為真'),10000^110為22
三、<< 、>>、 >>>區(qū)別 a)“>>”運算符
“>>”運算符作帶符號的位移處理,先將值向右移,并在高位填0,但符號位不變,也就是說負的值位移后,仍然是負的值。 例如:-10>>2 =-3 -10= 1111 1111 1111 1111 1111 1111 1111 0110 右移2位:0011 1111 1111 1111 1111 1111 1111 1101 結果:1111 1111 1111 1111 1111 1111 1111 1101 (全部天上原本符號位的值:1) b)“>>>”運算符 “>>>”運算符所作的是無符號的位移處理,它不會將所處理的值的最高位視為正負符號,所以作位移處理時,會直接在空出的高位填入0。當我們要作位移的原始值并非代表數(shù)值時(例如:表示顏色圖素的值,最高位并非正負號),可能就會需要使用此種無符號的位移。比如: -10>>>2=1073741821 -10=1111 1111 1111 1111 1111 1111 1111 0110 (不管原來的“符號”位的值(一長串1),空上的全部直接填0) 0011 1111 1111 1111 1111 1111 1111 1101=1037341821 c)“<<”運算符 “>>”運算符的所作的也是無符號的位移處理,同樣地,它不會將所處理的值的最高位視為正負符號,它作位移處理時,會直接左移并在低位填入0。 所以第二高位以下的位若移到了最高位,該值的正負可能會與原來的不同。 -2147483647<<2=4 -2147483647=1000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0100=4 d)“<<<”運算符 |
|
來自: jianyun.zhou > 《Java》