剛學(xué)習(xí)了強(qiáng)制類型轉(zhuǎn)換,用自己的理解總結(jié)了一下,如果有什么問題,希望大家可以批評指正(評論)。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供大荔網(wǎng)站建設(shè)、大荔做網(wǎng)站、大荔網(wǎng)站設(shè)計、大荔網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、大荔企業(yè)網(wǎng)站模板建站服務(wù),10余年大荔做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
int a=300;
byte b=(byte)a;
System.out.println(a);
System.out.println(b);
運行結(jié)果為:
當(dāng)一個超出byte存儲范圍的int型數(shù)進(jìn)行強(qiáng)制轉(zhuǎn)換時,轉(zhuǎn)換后數(shù)值可能會發(fā)生變化。
原因:int型數(shù)本來是以32位(最高位是符號位)二進(jìn)制數(shù)存儲在計算機(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ù)呢?
因為最高位是符號位,符號位為0, 為正數(shù),符號位為1,為負(fù)數(shù)。
2.那如果一個正數(shù)八位都是1,用剛才的方法不會被誤判為負(fù)數(shù)嗎?
不會,因為byte類型正數(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);
運行結(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);
}
}