
正数的补码与原码相同。负数的补码的符号位为1,其余位为该数绝对值的原码按位取反,然后整个数加1。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。以补码定义式为基础,沿数轴列出典型的真值、原码与补码表示,可清楚了解补码的有关性质。
补码的优点:
补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路和补码电路即可以完成各种有符号数加法和减法,在电路设计上相当方便。
另外,补码系统的 0 就只有一个表示方式,这和反码系统不同(在反码系统中,0 有两种表示方式),因此在判断数字是否为 0 时,只要比较一次即可。下图是一些 8 位补码系统的整数,它可表示的范围包括 -128 到 127,总共 256 个整数。
以上内容参考百度百科——补码
回答问题之前先让我们来了解一下:
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)。
因此我们在求一个数的补码之前,应当先求出这个数的原码。
将一个数转化为二进制数,既是它的源码。可通过除二求余法算得(既对一个数除二求余,这会得出一个数和一个余数,再对得出来的数进行求余,得出余数,以此类推,最后将余数倒写即可)。
如是一个正数,它的补码与它的原码相同;如果是一个负数,它的补码是在它的原码的基础上,开头符号位不变,其余各位取反,最后再在其上面+1(既在反码的基础上+1)。
反码——符号位的用法及正数的表示与“原码”一样;负数的表示是在“原码”表示的基础上通过将符号位以外的各位取反来获得的。如:000000010B=2,11111101B=-2
补码——符号位的用法及正数的表示与“原码”一样;负数的表示是在“反码”的基础上通过加1来获得的。如:00000010B=2,11111110B=-2
如果 X 是负数,其补码为:
[ X ]补 = 模 - | X |。
这种方法,比“原码反码符号位求反加一”,简单多了。
如何求补码?
正数:不用求。其本身就是补码
负数:负数的补码 = 负数 + 模。
如何求负数的二进制码?
除二取余。
十进制-7,其二进制就是-111。
假定码长是八位,模=2^8 = 256:
[-7]补码=-7 + 256 = 249 = 1111 1001(二进制)。
[+7]补码= 0000 0111(二进制)。
补码的性质:
[+7]补 + [-7]补 = 1111 1001 + 0000 0111 = 0。