計算機中數(shù)值以補碼形式存放
原碼
反碼:符號位不變屯换,數(shù)值位在原碼上取反
補碼:符號位不變编丘,數(shù)值為在原碼上取反并加一(反碼 + 1),為了解決 +0 和 -0 的問題
正數(shù)的:原碼彤悔,反碼嘉抓,補碼相同
負(fù)數(shù)的:原碼,反碼晕窑,補碼均不相同
public static void main(String[] args) {
// 1 111 1111 原碼
// 1 000 0000 反碼
// 1 000 0001 補碼 -127 計算機中存儲的是補碼
// 1000 0001 & 1111 1111 = 1000 0001 = 129
byte a = -127;
System.out.println(a);
System.out.println((byte)(a & 0xff));
int d = a;
// 1000 0000 0000 0000 0000 0000 0111 1111 -127 原碼
// 1111 1111 1111 1111 1111 1111 1000 0000 -127 反碼
// 1111 1111 1111 1111 1111 1111 1000 0001 -127 32位補碼 int
// 1 000 0001 -127 8位補碼 byte
System.out.println(d);
int c = a & 0xff;
System.out.println(c);
}