前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算机原理-原码、补码、反码

计算机原理-原码、补码、反码

作者头像
潇洒
发布2023-10-20 10:16:59
2110
发布2023-10-20 10:16:59
举报
文章被收录于专栏:石头岛

简述

二进制数字表示法三兄弟:

  • 原码
  • 补码
  • 反码

原码就是原来的编码,就是字面意思,而补码和反码比较奇怪,为什么需要这两种编码,意义是什么?

原码

原码表示法,正数没有区别,负数首位为13的原码 0000 0011 -3的原码 1000 0011

这个就这么简单,没什么可说的。

补码

这个是操作系统在对负数进行计算时的一种策略。 作用:解决二进制下表示负数的问题。

为什么需要补码,是什么情况下需要使用到补码。不用行不行? 不行 因为使用两个原码做加法,没法运算!!

不用行不行? 不行,不用玩不了。因为两个原码在二进制下无法做加法!!

使用二进制的第一位表示数字的正负位: 0表示正数,1表示数。

原码加法

原码之间无法直接进行计算,举个反例

2 + (-2) 结果应该是0,但是如果直接使用原码进行计算,结果溢出

代码语言:javascript
复制
0000 0010
1000 0010
---------
1000 0100

结果 期望是: 0 实际为: -4

现在解释为什么需要补码

为了得到正确的计算结果!! 如何能得到正确的计算结果?

再举个例子,这次是正确的例子: 2 + (-2) = 0 转换成二进制:

代码语言:javascript
复制
0000 0010
???? ????
---------
0000 0000

结果 0

也就是说,第二行?是什么样的二进制,才能得到正确的结果,才是关键!!

反码

其实已经有了结果了,那可以从结果中求和?的结果。 要得到补码,就需要反码参与通过反码算出补码。

推导过程

还是:2 + (-2)

代码语言:javascript
复制
0000 0010
1111 1110        <-- 十进制(-2)在计算机中真正的表示形态,即,补码
---------
0000 0000  

负数计算补码步骤: 1.计算二进制的绝对值,即,该数除符号位之外的二进制有效数据位,符号位是要保留的。 2.按位取反 3.+1

1.计算二进制的绝对值 -2的绝对值,就是正2:

代码语言:javascript
复制
1000 0010 # 最高位保留符号 1

2.取反

这个就是反码

代码语言:javascript
复制
1111 1101        # 注意,上面说了,符号位是要保留的。

3.最后进行 +1

代码语言:javascript
复制
1111 1110

这个最终结果就是:补码

总结

有点繁索,但过程就是这么个过程,实际使用中无感知,但是必须了解这个原理,这也就是为什么 127+1=-128的由来。

代码语言:javascript
复制
0111 1111
0000 0001
---------
1000 0000
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简述
  • 原码
  • 补码
    • 原码加法
      • 现在解释为什么需要补码
      • 反码
        • 推导过程
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档