ErikTse Runtime

  • 首页 / Home
  • | 算法学习 / Algorithm
    • 所有 / All
    • 简单 / Easy
    • 中等 / Medium
    • 困难 / Hard
  • | 技术分享 / Technology
    • 所有 / All
    • 网络技术 / NetWork
    • 资源共享 / Resource
    • 项目实践 / Event
  • ETOJ在线评测系统
Keep Going.
温故而知新.
  1. 首页
  2. 技术分享
  3. 学科学习
  4. 正文

[数字逻辑]有符号二进制数的编码表示

2022年8月30日 163点热度 1人点赞 0条评论

在计算机中,所有数字都用0/1二进制表示,编码一般分为“原码、反码、补码”三种。

正数

正数的原码、反码、补码都一样,对于纯小数也一样。

比如 \(5 = (101)_{2}\)

  • 原码:\((101)_{2}\)
  • 反码:\((101)_{2}\)
  • 补码:\((101)_{2}\)

比如 \(0.25 = (0010)_{2}\)

  • 原码:\((0010)_{2}\)
  • 反码:\((0010)_{2}\)
  • 补码:\((0010)_{2}\)

负数

负数在进行反码和补码操作时,都与“符号位无关”,反码是除符号位外所有位取反,补码等于反码+1(进位时到符号位截断,也无需考虑进位到符号位,只有-0会出现这种奇葩现象)。

在计算机中,负数都用补码存储,其实正数也是用补码存储的,但是正数的补码和原码一样。

比如\(-2 = (10000010)_{2}\)

  • 原码:\((10000010)_{2}\)
  • 反码:\((11111101)_{2}\)
  • 补码:\((11111110)_{2}\)

比如\(-0.25 = (1010)_{2}\)

  • 原码:\((1010)_{2}\)
  • 反码:\((1101)_{2}\)(注意取反码时符号位不动)
  • 补码:\((1110)_{2}\)(负数的补码 = 反码 + 1)

加减法运算

\(N1 + N2 = [N1]_{补} + [N2]_{补} = [N1 + N2]_{补}\)

\(N1 - N2 = [N1]_{补} - [N2]_{补} = [N1 - N2]_{补}\)

使用补码计算\(N1 + N2\)时,首先分别求出两者的补码,然后将补码相加(符号位当做普通位数参与运算),得到的结果就是求和结果,符号位是1就是负数,是0就是正数。

使用补码计算\(N1 - N2 = N1 + (-N2)\),可以将减法转换成加法计算。

当计算过程中出现进位溢出时,直接将溢出部分截断,这是计算规则。

比如\(5 - 2 = 5 + (-3)\)的计算过程如下:

5-2的补码运算

关于补码应该知道的

  1. 计算机中所有的数字(不论正数、负数,还是整数、浮点)都用补码储存。
  2. 用补码计算免去了对符号的判断,比原码计算更快更方便。
  3. 正数的反码、补码和原码一样。
  4. 负数的补码 = 反码 + 1
  5. 补码的原理是利用数据溢出。
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: 二进制 原码 反码 数字逻辑 编码 补码
最后更新:2022年8月30日

Eriktse

18岁,性别未知,ACM-ICPC现役选手,ICPC亚洲区域赛银牌摆烂人,CCPC某省赛铜牌蒟蒻,武汉某院校计算机科学与技术专业本科在读。

点赞
< 上一篇
下一篇 >

文章评论

取消回复

Eriktse

18岁,性别未知,ACM-ICPC现役选手,ICPC亚洲区域赛银牌摆烂人,CCPC某省赛铜牌蒟蒻,武汉某院校计算机科学与技术专业本科在读。

文章目录
  • 正数
  • 负数
  • 加减法运算
  • 关于补码应该知道的

友情链接 | 站点地图

COPYRIGHT © 2022 ErikTse Runtime. ALL RIGHTS RESERVED.

Theme Kratos | Hosted In TENCENT CLOUD

赣ICP备2022001555号-1

赣公网安备 36092402000057号