運算符 用來指明對於操作數的運算方式
按照操作數的數目來進行分類:
單目 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;
用一個數字異或(^)同一個數字兩次,值不會改變;