首页 > 编程知识 正文

原码反码补码转换例题,补码转源码

时间:2023-05-04 15:00:39 阅读:148508 作者:164

数字在机器中都用二进制来进行存储,有符号数则有原码、反码和补码三种表示方式

这三种表示方式里,最高位都代表的是符号位,1代表负数,0代表正数

1 .源代码中的一个源代码是被转换为二进制数而不做修改的数字,第一位是符号比特

8的源代码: 0000 1000

-8的源代码: 1000 1000

2 .反转正数的反转是自身

8的源代码: 0000 1000

8的反码: 0000 1000

负符号是原符号除了符号比特之外,其他所有的比特都以比特为单位反转

-8的源代码: 1000 1000

-8的反码: 1111 0111

3 .补数加补数是自身

8的源代码: 0000 1000

8的反码: 0000 1000

8的补数: 0000 1000

负数的补数是在反码上加1 (运算时包含编码位)。

-8的源代码: 1000 1000

-8的补数: 1111 0111

-8的补数: 1111 1000

正数的原反补码都是相等的,负数的原反补码是相互转换得到的

4 .补数存在的意义在机器中,数值一律用补码来表示和存储。

使用补码的原因:

使用补数,在统一处理符号位和数值字段的两个数字之间进行加减运算时,可以将数字读入CPU进行计算。 另一方面,CPU中只有加法器,为了将减法变换为加法,使用补数将加减运算统一为举个例子

计算8 - 5

因为CPU里只有加法器,所以把8 - 5变换成8(-5 )进行计算

(8) )。

8的源代码: 0000 1000

8的反码: 0000 1000

8的补数: 0000 1000

(-5 ) )。

-5的源代码: 1000 0101

-5的反码: 1111 1010

-5的补数: 1111 1011

8-5=8(-5 )

0000,1000

1111 1011

-----------------

0000 0011

如果0000 0011的符号位为0,则表示正数,原始的反补数全部相同,转换为十进制后为3

代码测试

int main () {int i=8; int j=-5; int m=i j; printf(%d(n ),m ); 返回0; }获得结果

让我们来看看利用调试存储在内存中的数据

首先确认存储在I地址中的数据

看到他储存在内存中的是08 (这里是十六进制),转换成二进制就是0000 ) 1000 ) (8的补数)。

然后,我们来看看j地址中存储的数据

这里保存的是fb转换为二进制的1111 1011。 (这里是-5的补数。

因此,数据以补数形式显示和保存在机器中,补数的出现也容易计算

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。