強制類型轉換(Java)

剛學習了強制類型轉換,用本身的理解總結了一下,若是有什麼問題,但願你們能夠批評指正(評論)。
強制類型轉換(Java)ide

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

運行結果爲:
強制類型轉換(Java)
當一個超出byte存儲範圍的int型數進行強制轉換時,轉換後數值可能會發生變化。學習

緣由:int型數原本是以32位(最高位是符號位)二進制數存儲在計算機內存裏,可是進行強轉爲byte類型後 ,只保留了該數的後八位,
這後八位是轉換後的數的補碼,最高位是符號位,若是最高位爲1,則轉換後的數爲負數,須要對該補碼取反再加1,獲得強轉後的數。3d

ps:
1.那爲何最高位是1,就是負數呢?
由於最高位是符號位,符號位爲0, 爲正數,符號位爲1,爲負數。
2.那若是一個正數八位都是1,用剛纔的方法不會被誤判爲負數嗎?
不會,由於byte類型正數最大爲127,八位二進制爲 0111 1111,最高位爲0,所以轉換後最高位爲1,必定是負數!
3.那推廣到其餘類型強制轉換是否知足上述說法呢?
知足!例如:code

long c=2147483651L;//大於int型最大值!
int d=(int)c;
System.out.println(c);
System.out.println(d);

運行結果爲:
強制類型轉換(Java)blog

參考源代碼:內存

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);
    }
}
相關文章
相關標籤/搜索