聲明:本文由牛旦教育原創(chuàng),頭條首發(fā),所有權(quán)保留,轉(zhuǎn)載注明來源。
JAVA編程中,最開始學(xué)習(xí)的應(yīng)該計(jì)算程序,應(yīng)該就是算術(shù)運(yùn)算了。Java中算術(shù)運(yùn)算符號有很多,包括加減乘除(+-*/)和取模(%)與它們的復(fù)合運(yùn)算(+=、-=、*=、/=)以及自增自減(++、--)操作,還有正負(fù)運(yùn)算(+、-)這些都是算術(shù)運(yùn)算的操作符。作為數(shù)學(xué)中的算術(shù)運(yùn)算符存在,它只能對數(shù)字類型的值進(jìn)行運(yùn)算,也就是只能對byte,short,char,int,long,float或double類型之一。而且在做具體運(yùn)算時(shí),它們是有規(guī)則要遵循的。

1.算術(shù)運(yùn)算規(guī)則
具體在做算術(shù)運(yùn)算時(shí),Java程序中做算術(shù)運(yùn)算的操作符所操作的兩個(gè)操作數(shù)看作一個(gè)表達(dá)式,而表達(dá)式的數(shù)據(jù)類型根據(jù)四條規(guī)則之一確定:
1) 如果其中一個(gè)操作數(shù)為double,則另一個(gè)操作數(shù)轉(zhuǎn)換為double,整個(gè)表達(dá)式的類型為double。
否則:
2) 如果其中一個(gè)操作數(shù)為float,則另一個(gè)操作數(shù)轉(zhuǎn)換為float,整個(gè)表達(dá)式的類型為float。
要不然,
3) 如果其中一個(gè)操作數(shù)為long,另一個(gè)操作數(shù)轉(zhuǎn)換為long,整個(gè)表達(dá)式的類型為long。
要不然,
4) 如果前三條規(guī)則都不適用,則所有操作數(shù)都轉(zhuǎn)換為int,前提是操作數(shù)不是int類型的,但整個(gè)表達(dá)式的類型為int。比如
byte b1,b2=2,b3=3; b1=5;//正確 b1=b2+b3;//編譯出錯(cuò)。
之所以出錯(cuò),就是本條規(guī)則起作用的原因(把int型賦值給byte型,不兼容)。
總結(jié)來說,操作數(shù)的數(shù)據(jù)類型轉(zhuǎn)換和涉及加法運(yùn)算符的表達(dá)式類型判定的最終結(jié)語:
var = operand1 + operand2;
如果操作數(shù)1和操作數(shù)2是編譯時(shí)常量,操作數(shù)1操作數(shù)2的結(jié)果將確定此賦值是否有效。 如果操作數(shù)1操作數(shù)2的結(jié)果在變量var的數(shù)據(jù)類型的范圍內(nèi),則表達(dá)式將被編譯。 否則,會(huì)生成編譯器錯(cuò)誤。 如果操作數(shù)1或操作數(shù)2是一個(gè)變量(即無法在編譯時(shí)確定操作數(shù)1或操作數(shù)2的值),則表達(dá)式的數(shù)據(jù)類型根據(jù)上面討論的四個(gè)規(guī)則之一來確定
2. 規(guī)則外注意項(xiàng)
第一點(diǎn):加號+可在字符串中使用,以拼接兩個(gè)字符串或兩個(gè)操作數(shù),形成新的字符串;
第二點(diǎn):作為拼接字符串操作符用時(shí),一個(gè)或多個(gè)操作數(shù)中,必須有一個(gè)是字符串(包括空字符串),其它的操作數(shù)可以為基本類型和引用類型;
第三點(diǎn):Java中除法有整數(shù)除法和浮點(diǎn)(帶小數(shù)點(diǎn))除法兩種,且除數(shù)不能為0。對于整數(shù)除法,結(jié)果只能是整數(shù),即將結(jié)果取整,忽略小數(shù)。如8/5,結(jié)果為1;對于浮點(diǎn)除法,則執(zhí)行浮點(diǎn)除法并且結(jié)果不會(huì)被截?cái)啵⒁忸愋娃D(zhuǎn)換問題;
第四點(diǎn):取模運(yùn)算的規(guī)則,分兩種情況——
1)當(dāng)兩個(gè)操作數(shù)都為整數(shù)數(shù)時(shí),遵守下列規(guī)則計(jì)算結(jié)果:
規(guī)則#1:如果右側(cè)操作數(shù)為零,則會(huì)出現(xiàn)運(yùn)行時(shí)錯(cuò)誤; 例如,
int num ; num = 15%0; //運(yùn)行時(shí)錯(cuò)誤
規(guī)則#2:如果右側(cè)操作數(shù)不為零,則結(jié)果的符號與左側(cè)操作數(shù)的符號相同;例如,
num = -15 % 6; // 把-3賦給num num = 15 % -6; // 把3賦給num num = -15 % -6; // 結(jié)果為 -3,因?yàn)樽筮叢僮鲾?shù)為-15, 負(fù)數(shù)
2)當(dāng)模數(shù)運(yùn)算符的任一操作數(shù)是浮點(diǎn)數(shù),遵循以下規(guī)則計(jì)算結(jié)果:
規(guī)則#1:即使右邊的操作數(shù)是一個(gè)浮點(diǎn)零,該操作也不會(huì)導(dǎo)致錯(cuò)誤。
規(guī)則#2:如果任一操作數(shù)是NaN,結(jié)果是NaN。NaN代表"不是數(shù)字"。NaN是算術(shù)運(yùn)算的結(jié)果,它不具有有意義的結(jié)果,例如將零除零、負(fù)數(shù)的平方根、將無窮大加到無窮大等等。有兩類NaN,可以通過Float.NaN或Double.NaN來使用一個(gè)NaN參與運(yùn)算。
規(guī)則#3:如果右側(cè)操作數(shù)為零,則結(jié)果為NaN。例如,
float f1; f1 = 15.0F % 0.0F; // 把Float.NaN 賦給 f1
規(guī)則#4:如果左邊的操作數(shù)是無窮大,結(jié)果是NaN。 例如
float f1; f1 = Float.POSITIVE_INFINITY % 2.1F; // 把Float.NaN 賦給f1
規(guī)則#5:如果前面的規(guī)則都不適用,模數(shù)運(yùn)算符將返回左側(cè)操作數(shù)和右側(cè)操作數(shù)的除法余數(shù)。結(jié)果的符號與左側(cè)操作數(shù)的符號相同。例如,
float f1; double d1; f1 = 15.5F % 6.5F; // 把 2.5F賦給 f1 d1 = 5.5 % 15.65; // 把5.5賦給 d1 d1 = 0.0 % 3.78; // 把0.0 賦給d1 d1 = 85.0 % Double.POSITIVE_INFINITY; // 把85.0賦給d1
第五點(diǎn):一元運(yùn)算符(+和-)。操作數(shù)必須是基本的數(shù)字類型。 如果操作數(shù)是byte,short或char,則將其提升為int,主要用于標(biāo)識數(shù)的正負(fù)。
就寫這些了,有收獲吧?點(diǎn)個(gè)贊,分享出去吧^_^