原码反码补码的计算方法

原码反码补码具体的讲解可以看看这篇:https://blog.csdn.net/afsvsv/article/details/94553228

总结一下计算方法

对于a-b,

首先,将a、b转换成二进制数,这时候的二进制数是无符号的。计算a无 - b无

原码:将无符号数首位当成符号位,正数置为0,负数置为1。这里要注意b的大小不应该超过原码可以表示的范围,否则转换出来的原码是错误的。计算a原+b原

反码:在原码的基础上,将函数的非符号位取反,符号位不变。计算a反+b反

补码:在反码的基础上,负数加1,正数不变;

或者在原码的基础上,对符号位后面(n-1)位的数字取模(假如后面(n-1)位表示数值,那么模为2^(n-1),用二进制表示就是首位1跟着n-1个0)

这里的模就是mod后面的那个数,C的计算符是%

比如,a=3,b=5,计算a-b

转换成二进制无符号数a无=0101,b无=0111,这时仍要计算0101 - 0111(不要计算结果,是错误的)

转换成原码a反=0101,b反=(-0111)=1111,这时要计算0101+1111(不要计算结果,是错误的)

转换成补码a补=0101,b补=1001,这时计算0101+1001=1110(这是a-b的补码表示,转换成原码是1010,即-2,正确)

原文地址:https://www.cnblogs.com/lylhome/p/13258797.html