計算機(jī)中數(shù)值以補(bǔ)碼形式存放
原碼
反碼:符號位不變,數(shù)值位在原碼上取反
補(bǔ)碼:符號位不變,數(shù)值為在原碼上取反并加一(反碼 + 1),為了解決 +0 和 -0 的問題
正數(shù)的:原碼,反碼,補(bǔ)碼相同
負(fù)數(shù)的:原碼,反碼,補(bǔ)碼均不相同
public static void main(String[] args) {
// 1 111 1111 原碼
// 1 000 0000 反碼
// 1 000 0001 補(bǔ)碼 -127 計算機(jī)中存儲的是補(bǔ)碼
// 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位補(bǔ)碼 int
// 1 000 0001 -127 8位補(bǔ)碼 byte
System.out.println(d);
int c = a & 0xff;
System.out.println(c);
}