- 論壇徽章:
- 0
|
一、基本數(shù)據(jù)類型
整型:byte、short、int、long (在計算機中以二進制補碼格式存儲)
浮點型:float、double (在計算機中以IEEE754格式存儲)
字符型:char (在計算機中以unicode碼格式存儲)
布爾型:boolean (只有true和false兩個值)
二、 1.長整型:long
定義 :long a=100;
int b=a; (編譯出錯)
給a重新賦值:long a=2147483648; (編譯出錯)
定義:long a=2147483648L;(正確,說明此時可以是long型的取值范圍)
說明在long型的數(shù)據(jù)后不加L/l時,數(shù)據(jù)仍為long型,但其取值范圍卻是int型的取值范圍;數(shù)據(jù)后加L/l時,取值范圍才是long型的取值范圍。
2.浮點型:long
定義:float a=19; 輸出a時為19.0
定義:float a=19.1; (編譯出錯)
定義:float a=19.1f; (正確)
說明在 float型的數(shù)據(jù)后不加F/f,則數(shù)據(jù)不能有小數(shù)位,但輸出時,能夠輸出一位小數(shù);若在float型的數(shù)據(jù)后加上F/f,則數(shù)據(jù)可以有小數(shù)位;
三、類型轉(zhuǎn)換(注:boolean型不會發(fā)生類型轉(zhuǎn)換,基本類型和復合類型不能相互轉(zhuǎn)換)
1.自動轉(zhuǎn)換
1)賦值轉(zhuǎn)換:用于短字節(jié)的數(shù)據(jù)類型轉(zhuǎn)換成長字節(jié)的數(shù)據(jù)類型
(byte型的數(shù)據(jù)不能轉(zhuǎn)換成char型,short型和char型數(shù)據(jù)也不能相互轉(zhuǎn)換)
2)單目運算符提升
++、--運算符不會自動提升,+(正)、-(負)會將byte、short、char型的數(shù)據(jù)自動轉(zhuǎn)換成int型的數(shù)據(jù)
3)雙目運算符提升
如果有一個操作數(shù)是double型的,則把另一個轉(zhuǎn)換成double型;
否則 如果有一個操作數(shù)是float型的,則把另一個轉(zhuǎn)換成float型;
否則 如果有一個操作數(shù)是long型的,則把另一個轉(zhuǎn)換成long型;
否則 兩個操作數(shù)都轉(zhuǎn)換成int型。
4)三目運算符
? :
其中op1必須是boolean型的,而op2和op3兩操作數(shù)必須是能夠自動轉(zhuǎn)換成相同類型的數(shù)據(jù),op2和op3會自動提升為兩操作數(shù)中字節(jié)較長的一個,并且結(jié)果為提升后的類型。 如:byte a1=20;
short a2=10;
boolean b=true;
short c = b ? a1 : a2;
結(jié)果為short型的數(shù)據(jù)c
2.強制轉(zhuǎn)換
例子: int a;
byte b=(byte)a;
定義:a=-126;
(分析:int形的數(shù)據(jù)有4個字節(jié),而byte形的數(shù)據(jù)只有1個字節(jié),所以只取int型數(shù)據(jù)的最后一個字節(jié))
a的原碼: 10000000,00000000,00000000,01111110
補碼: 11111111,11111111,11111111,10000010
法一:r=(10000010)=130 (此時將 10000010 看成是純的二進制數(shù)去計算,而不考慮它的符號位); 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ù)的最后一個字節(jié)看成是byte型數(shù)據(jù)的補碼形式,在將補碼轉(zhuǎn)換成原碼,即得到 b
四、邏輯運算符
1.&&和|| (&&的優(yōu)先級要高于||的)
特點:只要左操作數(shù)已經(jīng)得出整個表達式的值,就不再計算右操作數(shù)的之值,左右操作數(shù)必須為boolean型的。
例子: 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é)果: 1 false
2 true
2.&和| (邏輯位運算符)
特點:先把兩個操作數(shù)的值計算出來,然后再進行邏輯運算
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 false
2 true
五、移位運算
> (右移) 低位丟失、高位以符號位填充
>>> (無符號位右移) 低位丟失、高位以0填充
此運算符不會對左右兩操作數(shù)作算術(shù)提升,但會對左操作數(shù)進行單獨提升,若為byte、short、char、int型,則得到結(jié)果為int型,若為long型,則結(jié)果為long型,但左右操作數(shù)均不能為浮點型,否則出錯。
當左操作數(shù)為int型時,右操作數(shù)的低5位才有用,這樣可以防止移位超過int型所具有的位數(shù), 當左操作數(shù)為long型時,右操作數(shù)的低6位才有用。
例子:int a=-2;
short b=-10;
int c=a>>b;
b的補碼:11111111,11111111,11111111,11110110
取b的最后5位, r=(10110)=22;
a的補碼:11111111,11111111,11111111,11111110
將a向右移動22位,再在高位補上1,得到 11111111,11111111,11111111,11111111 ,轉(zhuǎn)換成原碼得到 c=-1
六、賦值運算
1.簡單賦值運算
表達式: =
左操作數(shù)可以事先沒有賦值
表達式的類型必須和變量的類型相同,或能賦值轉(zhuǎn)換成變量的類型,
2.組合賦值運算
表達式: op=
int a=10;
double b=23.3;
a*=b;
左操作數(shù)事先一定要賦值
左邊的類型和右邊的類型不一定要相同,此處a*b得到的是double型的,組合運算符會自動把double型的值轉(zhuǎn)換成int型的值存入變量a中。
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/77840/showart_1361383.html |
|