补码运算原理

补码运算原理 补码的运算原理?

补码的运算原理?

补码的运算原理?

1、计算机补码的原理

在计算机系统中,数值一律用补码来表示(存储)。

主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补

码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

2、补码与原码的转换过程几乎是相同的。

数值的补码表示也分两种情况:

(1)正数的补码:与原码相同。

例如, 9的补码是00001001。

(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。

例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值 7的原码 0000111按位取反为1111000;再加1,所以-7的补码是11111001。

3、已知一个数的补码,求原码的操作分两种情况:

(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。

(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。

例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负

数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111。

说明补码原理?

补码是在原码的基础上,为简化运算而发展出来的另一种表示带符号二进制数的方法,具体方法是: (1)确定表示数据的二进制数,通常是8位或16位; (2)如果被表示的数据是非负的,则用原码表示; (3)如果被表示的数据是负数,则把该数的绝对值表示成8位或16位二进制数,然后对每一位取反,即原位上是0就改写成1,原位上是1则改写成0,再吧取反后的结果加1。 ===========负数取反 1。。。

微机原理负数求补码?

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

话不多说,先上结论:

负数的补码 = (负数 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这种操作来计算负数以及负数的补码了,只需要通过普通的计算即可