1. 程式人生 > >程式裡的運算不止有加減乘除

程式裡的運算不止有加減乘除


java零基礎入門-核心語法篇(五) 運算子 型別轉換

運算子

運算子很重要,我們會在業務中經常用到運算子來幫助我們解決問題。在程式設計領域,運算子要比我們已經知道的加減乘除要多一些,包括算數運算,賦值運算,擴充套件賦值運算,自運算,比較運算,邏輯運算,三目運算(三元運算),位運算(這個知道名字就行,這裡不做講解)。

賦值運算

賦值運算子就是  等號  , 在等號左邊是變數,右邊是你要給變數的資料。

比如: int intTest = 5;   int 資料型別,intTest 變數名稱,

賦值運算,你要給變數賦值的數。簡單的說就是把等號右邊的數或者表示式的值賦予左邊的變數。等號右邊可以是表示式,比如

 int intTest = 1+2;  int intTest = 3*3-1;

都是可以的。在賦值的時候,會先計算右邊的結果,再複製給左邊的變數。


擴充套件賦值運算

擴充套件賦值運算

擴充套件賦值只是一種偷懶的寫法而已,其實不用也完全可以。需要注意的是這裡的變數,變數是可以重複賦值的,每次重新賦值後,變數儲存的資料都會變,所以在一段程式碼中,長得一樣的變數,出現在不同的位置,他肚子裡的值可是不一樣的,這個要注意一下。


算數運算

算術運算就是最簡單的加減乘除外加一個取餘,我們來看看實際效果


算數運算

1.首先我們定義了兩個整數型別的變數,然後計算加,減,乘,都是正確的結果,因為這幾個運算不會改變資料型別。

2.除法 1 :首先看不做任何操作的除法,10 / 7 結果是1,因為兩個變數都是整數型別,預設結果也是整數型別,所以是1,而不是帶有小數位的數。並且這裡是直接丟掉小數位,電腦是個傻子,別指望他會幫你四捨五入。你可以自己動手試試用 13 / 7 看看結果是多少就知道了。

除法 2 :(float)(intTest1 / intTest2) 首先計算的是 intTest1 / intTest2 這部分,因為有括號,所以先計算,這裡還是整數型別除法,結果還是1,然後做型別轉換(型別轉換下面說,這裡混個臉熟先),要做的轉換其實是這樣  (float)(1),所以結果就是將整數 1 轉換為浮點型別,結果就是 1.0

除法 3 :(float)intTest1 / intTest2  這裡與上面最大的不同就是 intTest1 / intTest2 外面沒有括號,所以優先計算型別轉換

(float)intTest1 / intTest2  =>  10.0  /  7   因為是浮點型別除以整數型別,結果自動轉換為浮點型別,所以結果是1.4285715

3 取餘 取餘計算比較簡單,就是你小學學的餘數,取餘計算會用在很多地方,留點心。


自運算

自運算

上圖演示了自增的兩種方法,自減一樣, intTest1 -- 表示先賦值,自己再減1,--intTest1表示先自己減1,再賦值。自運算在迴圈語句裡面應用很廣泛。沒有自乘和自除,這樣寫會報錯。


比較運算

比較運算

比較運算結果都是boolean型別,一般將 true 稱為 真,false 稱為 假,在後面講解的流程控制,分支結構中會經常用到。


邏輯運算

邏輯運算一般用來判斷多個表示式是否滿足條件,比如我想找個身高160以上,170以下的女同學來聊聊人生,然後有兩個女同學,一個身高180,一個身高165,他們符不符合標準呢?


&& 官方翻譯 : 與 ,可以念 並且 。比如:找老公,  男 && 有錢   翻譯:   男的並且有錢。&&要兩個表示式都是true,結果才是true。啥意思?找老公,必須是男的吧,左邊表示式 男 true,要有錢養你吧,右邊表示式 有錢 true,結果就是 嫁 true。如果一邊不滿足,就是false 不嫁。不是男的怎麼嫁?自己都養不活怎麼嫁?(還不來好好學習?)

|| 官方翻譯:或,可以念 或者。比如 :找工作,碼農 || 金融  翻譯:碼農或者金融。||兩個表示式,有一邊滿足即可。找工作,當碼農可以,收入還行 true,搞金融也可以啊true,結果true。當碼農 true,不搞金融 false,也行啊 結果還是true。所以只要一個true,結果就是true。

!官方翻譯:非,可以念 。比如:買東西,!貴 翻譯:不貴。這個就是把後面的結果翻過來,!貴 = 不貴,!好 = 不好

邏輯運算很容易把人繞進去,千萬不要寫過於複雜的邏輯運算,那是跟自己過不去。我們看看上面兩個等價的表示式

height4 < 160 || height4 > 170         和       !(height4 > 160 && height 4 < 170)   他們是一樣的,看不懂我們上圖


兩個其實一樣


除了 && 和 || 之外還有 & 和 |,不常用,知道有這符合即可。

三目運算(三元運算)


三目運算

先看看三目運算的結構

資料型別    變數名    =    表示式(結果是布林值)   ?   (表示式為true時,賦值)   :  (表示式為false時,賦值)

懂了吧,1<2 是 true ,所以intTest1 最後賦值 3

運算子到這裡就講完了。有同學肯定會問,不是還有什麼平方啊,開根號之類的運算嗎?為啥不講?其實的確還有很多種運算,但是平方開根號這種計算在jdk裡面封裝好了,他並不是作為最基礎的運算而存在,而是作為工具存在,我們隨時可以取出來用。我們下面看看它們在哪。


JRE自帶工具

運算子優先順序

級別高的優先運算

不認識的不用管


型別轉換

上面在做除法運算的時候提到了型別轉換,這裡就來詳細講解一下型別轉換。首先我們複習一下上一篇講的知識,每個資料型別佔用的空間。


整形


浮點型

資料轉換和空間有什麼關係?比如我們看byte,他的範圍是 -128 ~ 127 ,我把它改成 int 型別完全沒有問題,因為int型別的範圍比他大。但是如果int型別轉成byte型別會怎麼樣?int 型別佔用32位空間,而byte只佔用8位空間,電腦很傻,存不進去就亂存。

所以我們把型別轉換分為兩種,一種是小空間型別轉大空間型別,叫自動轉換,甚至無需說明,自動轉。而大空間型別往小空間型別轉換叫強制轉換,塞不進去也要塞,塞多少算多少,錯了拉到。

型別轉換


 賦值和方法呼叫 轉換規則:從低位型別到高位型別自動轉換;從高位型別到低位型別需要強制型別轉換

  (1)布林型和其它基本資料型別之間不能相互轉換; 

  (2)byte型可以轉換為short、int、、long、float和double; 

  (3)short可轉換為int、long、float和double; 

  (4)char可轉換為int、long、float和double; 

  (5)int可轉換為long、float和double; 

  (6)long可轉換為float和double; 

  (7)float可轉換為double; 

強制型別轉換 需要在前面用括號加型別說明,比如   (int)10.2,將浮點強制轉為int。