一.原码
1>.正数的原码就是它的本身
假设使用一个字节存储整数,整数10的原码是:0000 1010
2>.负数用最高位是1表示负数
假设使用一个字节存储整数,整数-10的原码是:1000 1010
二.反码
1>.正数的反码跟原码一样
假设使用一个字节存储整数,整数10的反码是:0000 1010
2>.负数的反码是负数的原码按位取反(0变1,1变0),符号位不变
假设使用一个字节存储整数,整数-10的反码是:1111 0101
三.补码(整数的补码才是在计算机中的存储形式。)
1>.正数的补码和原码一样
假设使用一个字节存储整数,整数10的补码是:0000 1010(这一串是10这个整数在计算机中存储形式)
2>.负数的补码是负数的反码加1
假设使用一个字节存储整数,整数-10的补码是:1111 0110(这一串是-10这个整数在计算机中存储形式)
四.在计算机中,用补码的原因
因为在使用原码,反码在计算时不准确,使用补码计算时才准确。
1>.使用原码计算10-10
0000 1010 (10的原码)
+ 1000 1010 (-10的原码)
------------------------------------------------------------
1001 0100 (结果为:-20,很显然按照原码计算答案是否定的。)
2>.使用反码计算10-10
0000 1010 (10的反码)
+ 1111 0101 (-10的反码)
------------------------------------------------------------
1111 1111 (计算的结果为反码,我们转换为原码的结果为:1000 0000,最终的结果为:-0,很显然按照反码计算答案也是否定的。)
3>.使用补码计算10-10
0000 1010 (10的补码)
+ 1111 0110 (-10的补码)
------------------------------------------------------------
1 0000 0000 (由于我们这里使用了的1个字节存储,因此只能存储8位,最高位(第九位)那个1没有地方存,就被丢弃了。因此,结果为:0)
五.练习用例
分别计算以下补码表示的十进制数字是多少
1、0000 1111
相信这个数字大家异口同声的就能说出它的答案是:15(因为正数的补码和原码一样)
2、1111 1111
计算过程:1111 1111(补码)------>1111 1110(反码)------>1000 0001(原码)
将其换算成原码之后就可以得到最后的结果为:-1
3、1111 0000
计算过程:1111 0000(补码)------>1110 1111(反码)------>10010000(原码)
将其换算成原码之后就可以得到最后的结果为:-16
4、1000 0001
计算过程:1000 0001(补码)------>1000 0000(反码)------->1111 1111(原码)
将其换算成原码之后就可以得到最后的结果为:-127