JAVA基礎之運算符

算術運算符:+ - * /  (加減乘除)
大部分和生活裏面的運算是一樣的,有個特殊情況需要注意。
例如:*/
int x = 6570;
x = x/1000*1000;


/*
上面運算中,如果按照生活中的運算結果應該還是6570.
但在JAVA虛擬機中的運算結果是6000.
因爲6570除以1000的結果是6.57,JAVA是強類型語言,x爲int類型,在這一步的時候,底層自動將
6.57轉爲整數,也就是6. 6乘以1000得到的結果是6000.
這是JAVA的特點,需要注意。


% 取餘,模運算 兩數相除,如果有餘數就只取餘數,如果沒有則是0.
例如:
*/
int  a=5%3;
/*
這裏,5除以3等於1,餘數爲2.模運算就是取餘數,所以得到的結果是2.
沒有餘數時得到的結果就是0.
如果左邊的數小於右邊的數,無法運算,結果直接就是左邊的數。
比如 2%5 無法運算,結果就直接是2.


+號同時也是連接符,用於輸出時與字符串連接。


++  自增1  --  自減1




賦值運算符:= +=  -=  *=  /=  %= (賦值 加等 減等 乘等 除等 模等  )
= 就是賦值  右邊的值賦給左邊   x = 3  意思就是把右邊的3賦給左邊的x
+=  加等 將左右兩邊的和賦給左邊。
例如:*/

int b =5;
b+=2;//b= b+2 可以這樣理解(運算過程不是如此)  就是將b原來的值5加2 再賦給左邊的b  所以結果是7.

//同理,減等就是將兩邊的差賦給左邊。

int c=8;
c-=3;//結果是5.

//乘等和除等的原理同上。
//賦值運算符的特點就是遇到不一樣的數據類型時,它會在底層自動進行數據類型轉換。例如:
short  d =5;
//d=d+2; 這裏是會報錯的,因爲2默認是int類型。
//應該寫爲
d=(short)(d+2);
//這一步就是強制類型轉換。


/*
比較運算符:> 大於 < 小於  >= 大於等於  <=小於等於 == 等等於  != 不等於
比較運算符是判斷表達式的結構符號,結果只能是true和false 



邏輯運算符:用於連接兩個Boolean類型的判斷表達式。
&:與符號。 */
int e=7;
//System.out.println(2<e&10>e);
/*
Boolean表達式的結果只能是true或false  &與符號用於連接兩邊表達式的正確性再進行判斷
上面我們定義的e爲7 2<7 同時 10>7 兩邊表達式的結果都爲true  所以它的結果也是true。
&與符號的運算特點:
true & true = true;
true & false = false;
false & true = false;
false & false = false;
說明在&與運算中,只有兩邊表達式爲true 結果才能爲true,否則都爲false。


|:或運算符的特點:
true | true = true;
false | true = true;
true | false = true;
false | false = false;
說明在|或運算符中,只有兩邊都爲false時結果才爲false,其餘都是true。

^異或運算符特點:
true ^ true = false;
false ^ true = true;
true ^ false = true;
false ^ false = false;
和|的唯一區別是兩邊爲true時,結果爲false。其餘和|或運算符的結果全部一樣。
意思說兩邊結果相同時爲false,不同時爲true。


! 非運算符,判斷事物的另一面。
!true = false; 非真就是假
!false = true; 非假就是真


&& 雙與
和&與的運算結果一樣,只是過程有區別。
&是無論左邊的運算結果是什麼,右邊都參與運算。
&&是隻要左邊爲false,右邊不參與運算,即短路。


|| 雙或
和|的運算結果一樣,過程有區別。
|是無論左邊的運算結果是什麼,右邊都參與運算。
||是隻要左邊爲true,右邊不參與運算,即短路。


&和&&的區別 |和||的區別很可能是面試題,一定要重點掌握。




位運算符:用於二進制位運算的符號。


&運算符 &不僅是邏輯運算符,同時也是位運算符。
比如 6&3 它的結果應該是這麼來的
位運算是二進制運算,所以得把兩個數轉換成二進制數再進行運算
爲了方便,這裏不再將兩個數的32位全部寫出來,只保留有效位即可。
6的二進制數爲 0110  3的二進制數爲  0011
在二進制中 0就是false  1就是true 所以
0110
&0011
0010 二進制轉換過來是2 它的結果就是2
&運算的判斷結果參考&作爲邏輯運算符是的判斷方法。兩個爲true才爲true,也就是1.


|運算符:和&一樣,同是邏輯運算符,也是位運算符
比如 6|3 算法與上面同理,判斷結果也是根據|作爲邏輯運算符時的結果。
      0110
          |0011
  0111  轉換過後是7 所以結果是7


^異或運算符
6^3  ^異或的特點就是兩邊相同爲false,不同爲true。
0110
  ^0011
   0101 轉換過來是5 
^異或有個特點:
一個數被同一個數異或兩次後得到的還是原數。這個特點可以用於數據加密。


總結:&與運算 |或運算 ^異或運算  這三種運算方法,有一個共同的特點。
那就是相運算的兩個數位置即使互換,結果還是一樣。


~反碼,數值取反。
整數的負數二進制表現形式爲取反再加1  
這裏就只是取反  未加1  所以一個整數取反的數就是他的負數再減1.
~8 的反碼是 -9   ~7的反碼是-8  就是這樣
反碼不常用,幾乎不用。


<< 左移運算符
3<<2
首先還是轉換爲二進制,這裏涉及到移位,爲方便理解,把全部字節都寫出來
0000-0000 0000-0000 0000-0000 0000-0011
左移兩位就是將整個數值的字節往左移動兩個數值並捨棄 後面空出來的兩個數值位用0彌補。
得到的結果就是:
0000-0000 0000-0000 0000-0000 0000-1100
也就是12 
由此我們可以看出 一個數左移一位得到的數就會是原數的2倍,也就是乘以2.再移動一位就再乘以2.
一個數左移幾位其實就是該數乘以2的幾次方。


>>右移運算符。和左移差不多。
需要注意的是,右移時,原數最高爲是0就拿0補位,是1就用1補位。
同樣我們可以看出特點  右移幾位其實就是該數除以2的幾次方、
例如:8>>2 得到的結果2.


>>>無符號右移  和右移原理是完全相同的
區別在於  無符號右移時,不管原數最高位是什麼,都拿0去補位。






練習,將兩個變量的值進行互換。
通常情況下,我們應該建立一個臨時的第三方變量來進行存儲,然後再互換前兩個變量。
*/
int f=3,g=6;
/*int h;
h=f;//這裏h等於3
f=g;//這裏f等於6
g=h;//這裏g等於3
//再提一個要求,再不允許使用第三方變量的情況下,我們應該怎麼互換?
//我們可以用兩者的和來進行運算。
f=f+g;//這裏f=3+6
g=f-g;//g=3+6-6;g=3;
f=f-g;//f=3+6-3;f=6;
不過這種方式不建議用,因爲如果兩數過大,超出數據類型範圍的話,容易強制轉換,數據丟失。

我們知道一個數異或同一個數兩次還能得到原數,所以這裏我們可以用異或來解決問題。
*/
f=f^g;//這裏f的值開始變化。
g=f^g;//3^6^6=3;g=3;
f=f^g;//3^6^3=6;f=6;


/*不過這種方式閱讀性很差,一般面試纔會用。
開發時一般還是用第三方變量方式比較多,閱讀性強,好理解。




三元運算符: (條件表達式)?表達式1:表達式2;
如果條件表達式結果爲true,則運算表達式1;
如果條件表達式結果爲false,則運算表達式2;
例如:*/
int h=5,y;
y=(h<3)?200:400;
發佈了47 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章