java運算符號


運算符 用來指明對於操作數的運算方式

按照操作數的數目來進行分類:

單目 a++

雙目 a+b

三目 (a>b)?x:y a>b成立,執行x;a>b不成立,執行y;

按照運算符的功能來進行分類:

算術運算:+ - * / %(取余、取模) ++ --(自減);int x = 5;x/2-->2;x%2-->1

賦值運算:= (賦值符號 將=右邊的內容(值 引用)存入=左邊的變量空間內)

     += -= *= /= %= (復合型);

  int x = 1;

  x++;//x自增了一個,如何讓x增加10個?

  int x = 1;for(int i=1;i<=10;i++){x++;} 或 x += 10;x = x+10;       

關系運算(比較);> >= < <= != == instanceof(判斷對象類型)

  1.=和==的區別;

    =賦值符號,將=后面的內容(值,引用)存入=左邊的變量空間內;

    ==比較符號 前后內容是否一致;

  2.比較運算符的最終結果是什么?

    3>2 boolean true false  

  3.作用:一個條件的判定;

邏輯運算;&(邏輯與,和、並且); |(邏輯或,或者)

     ^(邏輯異或,前后不一致則為true); !(邏輯非,一個條件,將原來結果取反)

      && (短路與); ||(短路或)

  1.邏輯運算前后連接的兩個boolean結果;

  2.&&短路與什么情況下才會發生?第一個條件為false時,會發生短路

  3.&&短路的是什么?短路的是&&之后所有計算的過程;

  4.如果發生了短路情況,性能比&稍微好一點;

  5.&和&&的區別?

    &可以視為邏輯運算,可以視為位運算;&&只能當做邏輯運算來用;

    &與&&都當做邏輯運算符來使用的時間區別如下;

    執行的最終結果沒有區別;

    第一個條件為false時,&&的性能好一點;

  6.|| 如果當第一個條件為true時,則后面的條件不執行;

位(bit)運算;

  &按位與; |按位或; ^按位異或;

  ~按位取反; <<按位左位移; >>按位右位移;>>>按位右位移(無符號)

  3&5=?

  1.將3和5轉化成二進制表示形式;011,101

  2.豎着按照對應位置進行& | ^計算;(1表示true,0表示false)

  3.將計算后的二進制結果轉化為十進制;3&5計算后的001,轉化為十進制為1;

    3|5 二進制111 十進制7;3^5 二進制110 十進制6;

  6<<1 =? 12; 

  6<<2 =? 24;

  6>>1 ==? 3

  左位移 相當於乘以2的位移次冪;

  右位移 相當於除以2的位移次冪;

===================================================================

原碼 反碼 補碼 二進制表示數字;

如,6,正數的原碼=反碼=補碼;

原碼: 00000000 00000000 00000000 00000110

如,-6,

原碼:10000000 00000000 00000000 00000110

反碼:11111111 11111111 11111111 11111001(符號不動,其它取反)

補碼:11111111 11111111 11111111 11111010(反碼+1)

計算機中不管是正數還是負數,存儲的形式都是以補碼形式存儲;

反碼是一種表示形式,取反是一個計算過程(每一個位置都取反);

進制轉化問題?

 十進制 0 1 2 3 4 5 6 7 8 9

 十進制-->二進制;60除以2取余數,將余數倒序排列,即為有效位;

 00000000 00000000 00000000 00111100;

 二進制-->十進制;從右至左開始計算 每一個元素乘以2的位置(0開始)次冪;

 111100;0*2的0次冪+1*2的2次冪+1*2的3次冪...=4+8+16+32=60

 

 

8進制 01234567

將三個二進制合並為一個;計算成十進制表示、八進制表示形式以0開頭;

16進制 0123456789ABCDEF

將四個bit記錄為一個小組,16進制表示形式以0X開頭;

 

====================================================================

int x = 1;

int y = x++;先賦值 后自增(這樣理解是錯的) 算術運算符優先級高於賦值運算(先計算,后賦值);

x++ 等價於 x=x+1,將x變量空間的內容先取出 常量區取出1 進行計算 ,再次存回x空間

x在想要做值交換(計算)的時候,會產生一個臨時的副本空間(備份)

++在變量的前面(++x),先自增后備份; ++在變量的后面(x++),先備份后自增;

會將副本空間內的值賦給別人;

int a=1;a=a++;a的結果為1;先備份,后自增,再賦值備份的值;

 

 

 

 

 

 

 x變量空間的值取出,從常量區取過來2 加法運算 結果重新存回x變量空間內;

x空間 8bit

常量區 32bit

+自動類型提升 8bit ——>32bit;

 強制類型轉換后,無問題了;

 

 

2.最有效地方法計算2*8的結果;

00000010 00001000;

2<<3相當於2乘以2的3次冪;

 乘數剛好是2的次冪;可以采用位移運算;

2*5 5<<1

3.兩個變量int a=1;int b=2;如何將兩個變量的值進行交換;

方式一、采用一個中間變量空間;好處是容易理解;壞處是產生一個新的內存空間;

 

方式二、采用賦值;好處是不產生新的空間;壞處是不易理解;壞處是可能會在+產生值越界;

a=a+b;//a空間存儲的兩個元素之和3;b仍是2;

b=a-b;//a+b-b剩下的是原來的a;此時b是1;a仍是3;

a=a-b;//a+b-a剩下的是原來的b;此時a是2;b仍然是1;

 

 

 方式三、

a=a^b;//1^2 ==>00000001^00000010==>00000011==3

b=a^b;// a^b^b;3^2==>011^010==>001==1

a=a^b;//a^b^a;

用一個數字異或(^)同一個數字兩次,值不會改變;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM