整数的存储和运算

原码反码和补码

有符号数最高位为符号位,0为正数,1为负数。

正数的原码、反码和补码都是正数的二进制

e.g. 6(10)=00000110(2) 原码:00000110 反码:00000110 补码:00000110

负数的原码为它绝对值的二进制,但最高位为1,反码为原码取反(除了符号位,0变1,1变0),补码为反码+1.

e.g. 6(10)=00000110(2), -6(10)的原码为10000110,反码为11111001,补码为11111010.

正数存储原码,负数存储补码。

负数原码、反码、补码的互化:

原码除了符号位,其他为取反为反码,反码+1为补码。

原码直接转补码: 从右开始数,遇到第一个1以后,1左边的各位(除了符号位)取反。

​ e.g. -6(10)的原码为10000110,从右边数起,第一个是0,跳过,第二位是1,从下一位起

开始取反。6的补码:11111010;

补码转原码:补码取反(除符号位)后+1,或者按照原码直接转补码的方法转换(符号位不变),即补码的补码为原码。

​ e.g. (1) -6的补码:11111010,取反:10000101 再+1得原码:10000110

​ (2)11111010->10000110

整数的运算(加减法)

补码相加。

加法:

5+(-6) :00000101+11111010=11111111,11111111最高位为1,负数,所以先把它转化为原码:10000001,即-1(10)

-6+6:11111010+00000110=10000000,出现了9位,但只存储8位,最高位被舍弃,即为0.如果不用补码而用反码运算,就会出现+0和-0的问题。

2.减法:转化为加法操作。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxwgd.html