public class Main {
public static void main(String[] args) {
byte b = (byte) 130;
System.out.println(b); // -126
}
}
必備知識:
原碼、反碼、補碼
原碼:
就是二進制定點表示法,即最高位為符号位,“0”表示正,“1”表示負,其餘位表示數值的大小。
反碼:
正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符号位除外。
補碼:
正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
回到正題
在 java 中 byte 130 的 130 預設是 int 類型(十進制),int 類型占用 4 個位元組。
将十進制的 130 轉化為二進制值為:
00000000 00000000 00000000 10000010
使用 byte 130 意思是強制類型轉換,會将 int 類型強制轉換為 byte 類型,強制轉化過程會進行截取,結果為:
10000010
通過截取後的結果可以看到,符号位(最高位)為 1,說明這是一個負數
在計算機中所有的資料都是以補碼的形式出現。是以求出截取後的資料的補碼即可。
原碼:10000010
反碼:11111101 原碼變反碼,最高位符号位不變,其他位取反,0變1,1變0
補碼:11111110 反碼變補碼,末位加 1
求得 原碼:10000010 的補碼為 補碼:11111110
最高位為符号位,為 1,代表負數。