原码,反码,补码的关系和计算

1:为什么会出现原码,反码,补码?

首先,确定一点,计算机中的储存信息的方式是以二进制的形式进行存储的。
而原码指的是对数字二进值的定点表示方法,之所以采取二进制来保存数据的原因是二极管只能表示两种状态,通或者不通,即0和1。

在进行数字运算的时候,只要将10进制的数据转为2进制,就可以快捷的完成运算。只不过这种运算方式在涉及到负数运算时就会出现问题,举个例子。

10进制运算:
-1 + 2 = 1;

二进制运算
1001
+
0010
|
1011
1011在转化为十进制为-3(最高位是1时表示负数)

这样的结果明显不符合我们的认知,那么错在什么地方呢?
原因在于我们使用二进制进行有符号运算时,会将最高位设置为符号位,来区分正数和负数,即将一个数据分为了符号部分和数值部分,举个例子

1011-3)
最高位的1是符号位,后三位是表示数值的数值位,分别设为a和b,合起来为a*b;
我们在进行加减运算时,符号位是不参加运算的,只进行数值位的运算,比如
1011
+ 
0001
=
1100
-3+1=4,这明显是错误的。原因就在于没有考虑到符号的影响,我们所有的计算都
在数值位上进行:

```cpp
设符号位是a,设数值位的值为b,十进制的值就是ab
现在加上一个数,a*(b+2)=ab+2a;当a是1时,表达式的值为b+2,当a是-1时,表达式
的值为-b-2,a的值影响到了整体的计算结果。

1.1:引入反码,抵消符号位带来的影响

从上面的计算已经知道,利用原码进行计算,会在正数和负数同时出现的运算上出现问题,本质的原因在于一个正数和一个负数进行运算时,符号位永远是1,导致原本做的加法变成了减法。在数学关系上,我们都知道负负得正,如果引入另外一个值,使得通过这个值既能反推出原码的值,又能用来做正确的数值计算,那么二进制运算的问题将得到完美解决。于是,反码应运而生。

要想做到负负得正,
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还是忘不了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值