语言求余和乘除优先级_愉快地学Java语言:第二章基本程序设计 第2讲
導(dǎo)讀
本文適合Java入門,不太適合Java中高級(jí)軟件工程師。
本文以《Java程序設(shè)計(jì)基礎(chǔ)篇》第10版為藍(lán)本,采用不斷提出問(wèn)題,然后解答問(wèn)題的方式來(lái)講述。
本篇文章只是這個(gè)系列中的一篇,如果你喜歡這種講解方式,或者覺(jué)得從中能學(xué)到知識(shí),可以關(guān)注我,以便查閱本系列其他文章。
本文是第二章的第2講,如果想看第1講,可以查看:
愉快地學(xué)Java語(yǔ)言:第二章基本程序設(shè)計(jì) 第1講
8數(shù)值數(shù)據(jù)類型和操作
Java中有多少個(gè)數(shù)值類型,它們都是什么?
一共有六種數(shù)值類型,分類歸納為:
- 整數(shù):byte,short,int,long
- 浮點(diǎn)數(shù):float(單精度),doubl(雙精度)
大家不禁會(huì)想標(biāo)準(zhǔn)IEEE754是什么?
IEEE 754 是美國(guó)電氣電子工程師協(xié)會(huì)通過(guò)的一個(gè)標(biāo)準(zhǔn),用于在計(jì)算機(jī)上表示浮點(diǎn)數(shù)。該標(biāo)準(zhǔn)已被廣泛采用。Java采用32位IEEE 754表示float型,64位IEEE 754表示double型。
都支持哪些種類的操作呢?
支持加(+),減(-),乘(*),除(/),求余(或稱取模,%)
要注意的運(yùn)算要點(diǎn)有哪些呢?
- 當(dāng)除數(shù)都是整數(shù)時(shí),除法結(jié)果是整數(shù),小數(shù)部分舍棄。
- 對(duì)于%,只有當(dāng)被除數(shù)是負(fù)數(shù)時(shí),余數(shù)才是負(fù)數(shù)。
- 操作符%通常用在正整數(shù)上,它也可用于負(fù)整數(shù)和浮點(diǎn)值。只有當(dāng)被除數(shù)是負(fù)數(shù)時(shí),余數(shù)才是負(fù)的。
- 兩個(gè)浮點(diǎn)數(shù)值的相等測(cè)試并不可靠。應(yīng)該測(cè)試兩個(gè)浮點(diǎn)數(shù)的差小于某個(gè)閾值,來(lái)比較他們是否接近。
例:
double x =1.0-0.1-0.1
x==0.8//可能為false
此外,使用方法Math.pow(a,b)來(lái)計(jì)算a的b次冪。
9數(shù)值型直接量
前面我們了解了變量,那么下面的代碼中出現(xiàn)的數(shù)字是什么呢?
int i =0;
它是直接量。直接量是一個(gè)程序中直接出現(xiàn)的常量值。
由于0數(shù)字,所以數(shù)值型直接量。
數(shù)值型直接量的要點(diǎn)包括:
- 數(shù)值型直接量包括:整型直接量,浮點(diǎn)型直接量。
- Long型的整型直接量要在數(shù)字后加字母L或l。
- 二進(jìn)制整型直接量以0b或0B開(kāi)頭,例:0B1111
- 八進(jìn)制整型直接量以0開(kāi)頭,例:07777
- 十六進(jìn)制整型直接量以0X開(kāi)頭,例:0XFFFF
- 浮點(diǎn)型直接量要在數(shù)字后加字母F或f(folat型直接量),D或d(double型直接量)
整型直接量默認(rèn)是int型的,指的是什么呢?
即,如果一個(gè)數(shù)字直接出現(xiàn)在代碼中,其后沒(méi)有字母,也不任何標(biāo)志開(kāi)頭(0b,0B,0,0X開(kāi)頭),那么它表達(dá)整型值。
與此相似地,浮點(diǎn)型直接量默認(rèn)情況下是double型的。
上面那個(gè)表格中,出現(xiàn)了3.4028235E+38這種表示法,那么它是什么呢?
它是科學(xué)記數(shù)法,用 aX10b的形式表示浮點(diǎn)型直接量。
2_3這種寫(xiě)法你見(jiàn)過(guò)嗎?
它也表示數(shù)值型直接量。為了提高可讀性,Java允許在兩個(gè)數(shù)字之間使用下劃線來(lái)表示數(shù)值型直接量。
10表達(dá)式求值以及操作符優(yōu)先級(jí)
如何對(duì)表達(dá)式進(jìn)行求值運(yùn)算呢?
算數(shù)我們都會(huì),其實(shí)算數(shù)運(yùn)算規(guī)則也適用于表達(dá)式求值。
我們都知道,先算乘除,再算加減,那么有多個(gè)操作符的時(shí)候怎么算呢?
這涉及到運(yùn)算符優(yōu)先級(jí)的問(wèn)題,先計(jì)算優(yōu)先級(jí)高的,乘除優(yōu)先級(jí)比加減優(yōu)先級(jí)高。乘與除優(yōu)先級(jí)相同,加與減優(yōu)先級(jí)相同。
關(guān)于操作符的優(yōu)先級(jí)可以列一個(gè)總表,但由于好多操作符目前還沒(méi)有接觸,所以暫且不列。
11增強(qiáng)賦值操作符
上面列舉了所有的增強(qiáng)賦值操作符,那么為什么要使用它呢?
看下面這個(gè)例子:
int i = 10;
i = i - 1;
這個(gè)例子很簡(jiǎn)單,首先聲明int型變量i,并初始化賦值10。然后,將i減1,再將結(jié)果賦給i。那么此時(shí)i的值是9.
有沒(méi)有更簡(jiǎn)潔的寫(xiě)法呢?
當(dāng)然有,i - = 1;
不過(guò),也沒(méi)簡(jiǎn)潔多少,只是少寫(xiě)了個(gè)字母i而已。
12自增自減操作符
看到命名,你想到了什么嗎?
對(duì)了,操作符放到變量前面就是前置操作符,放到后面就是后置操作符。
有沒(méi)有發(fā)現(xiàn)什么規(guī)律?
前置操作符使用變化后的值,后置操作符使用變化前的值。
例如,計(jì)算++i相當(dāng)于計(jì)算i=i+1;這樣i當(dāng)前的值是原值加1后的結(jié)果。
13數(shù)值類型轉(zhuǎn)換
什么是類型轉(zhuǎn)換?
將一種數(shù)據(jù)類型的值轉(zhuǎn)換為另一種數(shù)據(jù)類型的操作。
為什么要轉(zhuǎn)換類型?
實(shí)際應(yīng)用的需要,再者就是為了合理的存儲(chǔ)數(shù)據(jù)。
先來(lái)看幾個(gè)概念:
擴(kuò)寬類型:將一個(gè)小范圍類型的變量轉(zhuǎn)換為大范圍類型的變量。
縮窄類型:將一個(gè)大范圍類型的變量轉(zhuǎn)換為小范圍類型的變量。Java自動(dòng)擴(kuò)寬數(shù)據(jù)類型,縮窄類型必須執(zhí)行顯示轉(zhuǎn)換,如果不顯示轉(zhuǎn)換會(huì)出現(xiàn)編譯錯(cuò)誤。
能給個(gè)形象的比喻嗎?
形象地說(shuō),擴(kuò)寬類型就好比有11個(gè)人想進(jìn)能容納10個(gè)人的屋子,縮窄類型就好比能容納10個(gè)人的屋子只進(jìn)了9個(gè)人,前者無(wú)論如何也容納不下第11個(gè)人,后者是對(duì)資源的浪費(fèi)。
例如,顯示轉(zhuǎn)換
float f = 5.55f;
int i = (int)f;//此時(shí)i的值是5。
如果寫(xiě)成:float f = 5.55;呢?
那么一定會(huì)報(bào)編譯錯(cuò)誤,因?yàn)閯e忘了,浮點(diǎn)型直接量默認(rèn)情況下是double型的,double精度高于float,double轉(zhuǎn)換為float屬于縮窄類型。
看到左側(cè)的紅叉了碼,驗(yàn)證了我們的判斷。把鼠標(biāo)方在其上面,看看具體的信息:Type mismatch: cannot convert from double to float
那么在類型轉(zhuǎn)換中還應(yīng)該注意點(diǎn)什么呢?
- 類型轉(zhuǎn)換中,被轉(zhuǎn)換變量不會(huì)被改變。
- 形如x1 op= x2的增強(qiáng)賦值表達(dá)式,執(zhí)行的實(shí)際是x1=(T)(x1 op x2),T是x1的類型。
- 浮點(diǎn)型轉(zhuǎn)換為int,小數(shù)部分會(huì)被截掉。
14常見(jiàn)錯(cuò)誤
如果賦給變量的值,超過(guò)它的存儲(chǔ)范圍,會(huì)怎么樣呢?
這種情形被稱為溢出。超過(guò)變量所能承載的最大值、最小值算溢出。然而Java不會(huì)給出警告或者報(bào)錯(cuò)。產(chǎn)生的結(jié)果會(huì)獲讓人覺(jué)得奇怪。
例如,int型變量能存儲(chǔ)的最大值是2147483647,最小值是-2147483648
若有下面的賦值表達(dá)式:
int i = 2147483647 + 1;
那么此時(shí)i的值是-2147483648
若有賦值表達(dá)式:
Int i = -2147483648 - 1;
那么此時(shí)i的值是2147483647。
每天30分鐘,堅(jiān)持一個(gè)月就能為Java開(kāi)發(fā)打下堅(jiān)實(shí)的基礎(chǔ)!努力學(xué)習(xí)吧!
總結(jié)
以上是生活随笔為你收集整理的语言求余和乘除优先级_愉快地学Java语言:第二章基本程序设计 第2讲的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 浙江下架 42 款侵害用户权益 App,
- 下一篇: idea 线程内存_Java线程池系列之