剛學習了強制類型轉換,用本身的理解總結了一下,若是有什麼問題,但願你們能夠批評指正(評論)。
ide
int a=300; byte b=(byte)a; System.out.println(a); System.out.println(b);
運行結果爲:
當一個超出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);
運行結果爲:
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); } }