负数的补码怎么算

负数的补码怎么算 负数的补码如何计算?举个例子?

负数的补码如何计算?举个例子?

负数的补码如何计算?举个例子?

正数的原码,补码,反码都相同,都等于它本身负数的补码是:符号位为1,其余各位求反,末位加1反码是:符号位为1,其余各位求反,但末位不加1也就是说,反码末位加上1就是补码-1011原码:11011反码:10100 //负数时,反码为原码取反补码:10101 //负数时,补码为原码取反+1移码:00101 //原数 10000

微机原理负数求补码?

不久之前,因为做项目遇到了不少客户的数据为负数的,由于数据传输的关系,需要将负数的值传给客户,因此,接触到了一种非常不错的计算负数补码的方法,下面想总结一下这个方法的原理,方便自己记忆。

话不多说,先上结论:

负数的补码 = (负数 2的数据数量次方)取二进制

例子:一个字节数数据,-2

-2的补码 = -2 2^8 = 11111110

通用计算方法

众所周知,补码与原码,反码的关系如下:

1、正数的原码 = 正数的反码 = 正数的补码

2、负数的原码 = 对应正数的原码 2的数据位数量次方,最高位作为符号位

3、负数的反码 = 负数的原码的符号位不变,其他数据取反

4、负数的补码 = 负数的反码 1

计算原理

把有符号位的负数,当作无符号数来表示,就可以知道,对于取反操作来说,负数的原码取反 = 2的数据位数量次方 - 负数原码 - 1

以一个字节为例:-1的反码 = 1取反 = 2^8 - 1 - 1 = 1111 1110-2的反码 = 2取反 = 2^8 - 2 - 1 = 1111 1101-3的反码 = 3取反 = 2^8 - 3 - 1 = 1111 1100(以此类推)-128的反码 = 128取反 = 2^ 8 - 128 -1 = 1000 0000

其实通过上面的罗列就可以清楚的知道为什么了,因为对于2进制来说,负数实际上就是对应正数的原码 2的数据位数量次方作为符号位,同时由于正数的补码,原码,反码当作无符号位时,计算方式和负数是一致的,其差值恰好为2的数据位数量次方。

如果是一个字节,就是2的8次方如果是两个字节,就是2的16次方如果是三个字节,就是2的24次方如果是四个字节,就是2的32次方

由此可见,熟悉了有符号数和无符号数的关系之后,就不需要再通过取反 1这种操作来计算负数以及负数的补码了,只需要通过普通的计算即可