原碼: 第壹位表示符號位,1為負,0為正
? +1源碼 0000 0001
? -1 源碼1000 0001
原碼轉反碼:正值反碼是其本身,負值的反碼符號位不變,其余值取反
+1 原碼 0000 0001 反碼 0000 0001
-1 原碼1000 0001 反碼1111 1110
源碼轉補碼:正值的補碼是它本身,負值的補碼符號位不變,其它反碼+1
?+1 原碼 0000 0001 反碼0000 0001 補碼0000 0001
? -1 原碼 1000 0001 反碼1111 1110? 補碼1111 1111
計算機中,負值是以補碼形式存在的
應用舉例
? public class A {
static void main String(string[] args){
int b = 456;
byte a = (byte)b;
System.out.println(); // -56
}
}
解釋:
1)456,int類型? 為 00000000 00000000 00000001 1100 10000
2)強制類型轉換成byte類型,byte為8位,所以 (byte 456) 1100 1000
3)首字符為1,是負值,計算機中,負數是以補碼形式存在的
4)所以,byte 456,原碼的反碼:補碼 - 1 ,符號位不變,值-1,為1100 0111補,原碼負數的符號位不變,其他值取反:1011 1000原轉成十進制是-56