原码反码补码是怎么回事?

#在计算机内,有符号数有3种表示法:原码、反码和补码。所有数据的运算都是采用补码进行的。

以正负8为例

##原码   

+8|0 000 1000    -8|1 000 1000   

就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。


##反码   

+8|0 000 1000    -8|1 111 0111

正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。


##补码   

+8|0 000  1000    -8|1 111 1000

正数的补码与其原码相同;负数的补码是在其反码的末位加1。


#为什么会有这样的编码方式呢?

这样的编码方式诞生的原因其实很简单,是为了让互为相反数的两个数在二进制表示下也可以相加得0以方便运算。

我们先来解释反码,整数的反码与其原码相同,负数的反码是对其原码逐位取反,但符号位除外。

以上面的正负8为例,+8和-8的反码相加之和为1 111 1111,即相加之后为当前位数下的最大值。

此时机智的小伙伴立刻明白补码存在的意义。

负数的补码是在其反码的末位加1,末位这个1起到了画龙点睛的作用,依然以正负8为例,+8和-8的补码之和为10 000 0000,由于第一位溢出,故被舍去,于是原码补码之和成为0 000 0000,完美的0,达成正负相加得0的目的。这就是补码存在的意义。

你可能感兴趣的:(原码反码补码是怎么回事?)