溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

強(qiáng)制類型轉(zhuǎn)換(Java)

發(fā)布時間:2020-07-14 15:19:03 來源:網(wǎng)絡(luò) 閱讀:1087 作者:靈谷魚 欄目:編程語言

剛學(xué)習(xí)了強(qiáng)制類型轉(zhuǎn)換,用自己的理解總結(jié)了一下,如果有什么問題,希望大家可以批評指正(評論)。
強(qiáng)制類型轉(zhuǎn)換(Java)

int a=300;
byte b=(byte)a;
System.out.println(a);
System.out.println(b);

運(yùn)行結(jié)果為:
強(qiáng)制類型轉(zhuǎn)換(Java)
當(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é)果為:
強(qiáng)制類型轉(zhuǎn)換(Java)

參考源代碼:

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);
    }
}
向AI問一下細(xì)節(jié)

免責(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)容。

AI