1. 程式人生 > >java語言基礎(10)——型別強制轉換時的資料溢位計算

java語言基礎(10)——型別強制轉換時的資料溢位計算

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