您好,登錄后才能下訂單哦!
剛學(xué)習(xí)了強(qiáng)制類型轉(zhuǎn)換,用自己的理解總結(jié)了一下,如果有什么問題,希望大家可以批評指正(評論)。
int a=300;
byte b=(byte)a;
System.out.println(a);
System.out.println(b);
運(yùn)行結(jié)果為:
當(dāng)一個超出byte存儲范圍的int型數(shù)進(jìn)行強(qiáng)制轉(zhuǎn)換時,轉(zhuǎn)換后數(shù)值可能會發(fā)生變化。
原因:int型數(shù)本來是以32位(最高位是符號位)二進(jìn)制數(shù)存儲在計(jì)算機(jī)內(nèi)存里,但是進(jìn)行強(qiáng)轉(zhuǎn)為byte類型后 ,只保留了該數(shù)的后八位,
這后八位是轉(zhuǎn)換后的數(shù)的補(bǔ)碼,最高位是符號位,如果最高位為1,則轉(zhuǎn)換后的數(shù)為負(fù)數(shù),需要對該補(bǔ)碼取反再加1,得到強(qiáng)轉(zhuǎn)后的數(shù)。
ps:
1.那為什么最高位是1,就是負(fù)數(shù)呢?
因?yàn)樽罡呶皇欠栁唬栁粸?, 為正數(shù),符號位為1,為負(fù)數(shù)。
2.那如果一個正數(shù)八位都是1,用剛才的方法不會被誤判為負(fù)數(shù)嗎?
不會,因?yàn)閎yte類型正數(shù)最大為127,八位二進(jìn)制為 0111 1111,最高位為0,因此轉(zhuǎn)換后最高位為1,一定是負(fù)數(shù)!
3.那推廣到其他類型強(qiáng)制轉(zhuǎn)換是否滿足上述說法呢?
滿足!例如:
long c=2147483651L;//大于int型最大值!
int d=(int)c;
System.out.println(c);
System.out.println(d);
運(yùn)行結(jié)果為:
參考源代碼:
public class JavaDaily_2{
public static void main(String[] args){
int a=511;
byte b=(byte)a;
System.out.println(a);
System.out.println(b);
long c=2147483651L;//大于int型最大值!
int d=(int)c;
System.out.println(c);
System.out.println(d);
}
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。