java語言基礎(10)——型別強制轉換時的資料溢位計算
阿新 • • 發佈:2019-02-01
class ForceConvert
{
public static void main(String[] args){
//byte a = 130;
byte a = (byte) 130;
System.out.println(a); // -126
}
}
如上所示例,我們直接定義 byte a = 130; 編譯會報錯,可能損失精度,因為byte 的範圍是-128 ~ 127,而130超出byte範圍。報錯就不難理解了。而當我們用強制轉換時 byte a = (byte) 130; 此時雖然可以編譯通過,但此時a是多少呢。
分析:
整數預設是int型別,那麼130 應該是佔四個位元組,表示為
130 原碼 反碼 補碼 00000000 00000000 00000000 10000010
強制轉換為byte會擷取資料 ,剩下最後一個位元組 10000010,而此資料還是補碼錶示,我們把它轉換為原碼。
補碼 10000010 減一求得反碼
反碼 10000001 取反求得原碼
原碼 11111110 轉換為十進位制 -126