整数的二进制表示方法有三种:原码、反码和补码
对于有符号整数,二进制序列中最高位的1位是符号位,剩余的都是数值位。符号位中用0表示“正”,用1表示“负”。
正整数
正整数的原码、反码和补码都相同。例如12
原码 00000000000000000000000000001100
反码 00000000000000000000000000001100
补码 00000000000000000000000000001100
负整数
原码:即直接将数值按照正负数的形式翻译成二进制
反码:原码符号位不变,其他位依此按位取反
补码:反码+1
例如-12
原码 10000000 00000000 00000000 00001100
反码 11111111 11111111 11111111 11110011
补码 11111111 11111111 11111111 11110100
在计算机系统中,数值一律用补码来表示和存储,因为使用补码可以将符号位和数值域统一处理,又因为CPU只有加法器,所以用补码运算可以加法和减法统一处理,如a-b可以看成a+(-b)。
那么我们以1-1=0为例
1的原码 00000000 00000000 00000000 00000001
1的补码 00000000 00000000 00000000 00000001
-1的原码 10000000 00000000 00000000 00000001
-1的反码 11111111 11111111 11111111 11111110
-1的补码 11111111 11111111 11111111 11111111
计算1 00000000 00000000 00000000 00000001
+(-1) 11111111 11111111 11111111 11111111
= 1 00000000 00000000 00000000 00000000 ==0