一、基本數(shù)據(jù)類(lèi)型
- 整型:byte、short、int、long (在計(jì)算機(jī)中以二進(jìn)制補(bǔ)碼格式存儲(chǔ))
- 浮點(diǎn)型:float、double (在計(jì)算機(jī)中以IEEE754格式存儲(chǔ))
- 字符型:char (在計(jì)算機(jī)中以u(píng)nicode碼格式存儲(chǔ))
- 布爾型:boolean (只有true和false兩個(gè)值)
二、1、長(zhǎng)整型:long
定義 :long a=100;int b=a; (編譯出錯(cuò))
給a重新賦值:long a=2147483648; (編譯出錯(cuò))
定義:long a=2147483648L;(正確,說(shuō)明此時(shí)可以是long型的取值范圍)
說(shuō)明在long型的數(shù)據(jù)后不加L/l時(shí),數(shù)據(jù)仍為long型,但其取值范圍卻是int型的取值范圍;數(shù)據(jù)后加L/l時(shí),取值范圍才是long型的取值范圍。
2、浮點(diǎn)型:long
定義:float a=19; 輸出a時(shí)為19.0
定義:float a=19.1; (編譯出錯(cuò))
定義:float a=19.1f; (正確)
說(shuō)明在 float型的數(shù)據(jù)后不加F/f,則數(shù)據(jù)不能有小數(shù)位,但輸出時(shí),能夠輸出一位小數(shù);若在float型的數(shù)據(jù)后加上F/f,則數(shù)據(jù)可以有小數(shù)位;
三、類(lèi)型轉(zhuǎn)換(注:boolean型不會(huì)發(fā)生類(lèi)型轉(zhuǎn)換,基本類(lèi)型和復(fù)合類(lèi)型不能相互轉(zhuǎn)換)
1、自動(dòng)轉(zhuǎn)換
- 賦值轉(zhuǎn)換:用于短字節(jié)的數(shù)據(jù)類(lèi)型轉(zhuǎn)換成長(zhǎng)字節(jié)的數(shù)據(jù)類(lèi)型(byte型的數(shù)據(jù)不能轉(zhuǎn)換成char型,short型和char型數(shù)據(jù)也不能相互轉(zhuǎn)換)
- 單目運(yùn)算符提升:++、――運(yùn)算符不會(huì)自動(dòng)提升,+(正)、-(負(fù))會(huì)將byte、short、char型的數(shù)據(jù)自動(dòng)轉(zhuǎn)換成int型的數(shù)據(jù)
- 雙目運(yùn)算符提升:如果有一個(gè)操作數(shù)是double型的,則把另一個(gè)轉(zhuǎn)換成double型;否則 如果有一個(gè)操作數(shù)是float型的,則把另一個(gè)轉(zhuǎn)換成float型;否則 如果有一個(gè)操作數(shù)是long型的,則把另一個(gè)轉(zhuǎn)換成long型;否則 兩個(gè)操作數(shù)都轉(zhuǎn)換成int型。
- 三目運(yùn)算符 ? : 其中op1必須是boolean型的,而op2和op3兩操作數(shù)必須是能夠自動(dòng)轉(zhuǎn)換成相同類(lèi)型的數(shù)據(jù),op2和op3會(huì)自動(dòng)提升為兩操作數(shù)中字節(jié)較長(zhǎng)的一個(gè),并且結(jié)果為提升后的類(lèi)型。
如:
byte a1=20;short a2=10;boolean b=true;short c = b ?a1 : a2;
結(jié)果為short型的數(shù)據(jù)c
2、強(qiáng)制轉(zhuǎn)換
例子:
int a;
byte b=(byte)a;
定義:a=-126;
(分析:int形的數(shù)據(jù)有4個(gè)字節(jié),而byte形的數(shù)據(jù)只有1個(gè)字節(jié),所以只取int型數(shù)據(jù)的最后一個(gè)字節(jié))
a的原碼: 10000000,00000000,00000000,01111110
補(bǔ)碼: 11111111,11111111,11111111,10000010
法一:r=(10000010)=130 (此時(shí)將 10000010 看成是純的二進(jìn)制數(shù)去計(jì)算,而不考慮它的符號(hào)位); byte型數(shù)據(jù)范圍[-128,127],由于 r>127,所以 r=r-M (若整型數(shù)據(jù)值域[-L,R],則M=L+R+1),如果r還不在byte型數(shù)據(jù)的取值范圍內(nèi),則繼續(xù) r=r-M 直至r在其取值范圍內(nèi),取得r后,即為byte型的 b .此處r=-126,所以輸出b為-126.
法二:直接將int型數(shù)據(jù)的最后一個(gè)字節(jié)看成是byte型數(shù)據(jù)的補(bǔ)碼形式,在將補(bǔ)碼轉(zhuǎn)換成原碼,即得到 b
四、邏輯運(yùn)算符
1、&&和|| (&&的優(yōu)先級(jí)要高于||的)
特點(diǎn):只要左操作數(shù)已經(jīng)得出整個(gè)表達(dá)式的值,就不再計(jì)算右操作數(shù)的之值,左右操作數(shù)必須為boolean型的。
例子:
boolean test1= ++x==-1 && ++x==1 || ++x=2;boolean test2= ++y==-1 || ++y==1 && ++y=2;System.out.println(x+" "+test1);System.out.println(y+" "+test2);結(jié)果:1 false2 true
2、&和| (邏輯位運(yùn)算符)
特點(diǎn):先把兩個(gè)操作數(shù)的值計(jì)算出來(lái),然后再進(jìn)行邏輯運(yùn)算
int x=-1,y=-1;boolean test1= ++x==-1 & ++x==1 | ++x=2;boolean test2= ++y==-1 | ++y==1 & ++y=2;System.out.println(x+" "+test1);System.out.println(y+" "+test2);結(jié)果: 2 false2 true
五、移位運(yùn)算
<< (左移) 高位丟失、低位以0填充
>> (右移) 低位丟失、高位以符號(hào)位填充
>>> (無(wú)符號(hào)位右移) 低位丟失、高位以0填充
此運(yùn)算符不會(huì)對(duì)左右兩操作數(shù)作算術(shù)提升,但會(huì)對(duì)左操作數(shù)進(jìn)行單獨(dú)提升,若為byte、short、char、int型,則得到結(jié)果為int型,若為long型,則結(jié)果為long型,但左右操作數(shù)均不能為浮點(diǎn)型,否則出錯(cuò)。
當(dāng)左操作數(shù)為int型時(shí),右操作數(shù)的低5位才有用,這樣可以防止移位超過(guò)int型所具有的位數(shù), 當(dāng)左操作數(shù)為long型時(shí),右操作數(shù)的低6位才有用。
例子:
int a=-2;
short b=-10;
int c=a>>b;
b的補(bǔ)碼:11111111,11111111,11111111,11110110
取b的最后5位, r=(10110)=22;
a的補(bǔ)碼:11111111,11111111,11111111,11111110
將a向右移動(dòng)22位,再在高位補(bǔ)上1,得到 11111111,11111111,11111111,11111111 ,轉(zhuǎn)換成原碼得到 c=-1
六、賦值運(yùn)算
1.簡(jiǎn)單賦值運(yùn)算
表達(dá)式: =
左操作數(shù)可以事先沒(méi)有賦值
表達(dá)式的類(lèi)型必須和變量的類(lèi)型相同,或能賦值轉(zhuǎn)換成變量的類(lèi)型,
2.組合賦值運(yùn)算
表達(dá)式: op=
int a=10;
double b=23.3;
a*=b;
左操作數(shù)事先一定要賦值
左邊的類(lèi)型和右邊的類(lèi)型不一定要相同,此處a*b得到的是double型的,組合運(yùn)算符會(huì)自動(dòng)把double型的值轉(zhuǎn)換成int型的值存入變量a中。