当前位置: 首页 > news >正文

【软件考试】一文学会原码,反码与补码

文章目录

    • 三码互转
    • 十进制数转二进制

三码互转

在计算机中,数值通常以二进制形式表示,原码、反码和补码是三种不同的表示方法。

一、原码

  1. 概念

    • 原码是最直观的二进制表示法,最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。
    • 例如,对于 8 位二进制数,+5 的原码是 00000101,-5 的原码是 10000101。
  2. 计算规则

    • 正数的原码就是其二进制表示。
    • 负数的原码是在对应正数的原码基础上,将符号位变为 1。

二、反码

  1. 概念

    • 反码是对原码的一种变形,其目的是为了方便计算。
    • 对于正数,反码与原码相同;对于负数,反码是在原码的基础上,符号位不变,其余位按位取反。
  2. 计算规则

    • 正数的反码就是原码本身。
    • 负数的反码是将原码除符号位外的所有位取反。例如,-5 的原码是 10000101,反码是 11111010。

三、补码

  1. 概念

    • 补码是计算机中实际存储和运算的二进制表示法,它可以将减法运算转化为加法运算,简化计算机的运算过程。
    • 对于正数,补码与原码、反码相同;对于负数,补码是在反码的基础上加 1。
  2. 计算规则

    • 正数的补码就是原码本身。
    • 负数的补码是其反码加 1。例如,-5 的原码是 10000101,反码是 11111010,补码是 11111011。

四、补码的优势

在计算机中使用补码进行运算有以下几个优势:

  1. 可以将减法运算转化为加法运算,简化了运算电路的设计。例如,计算 5 - 3,可以转化为 5 + (-3),而 -3 的补码可以很容易地与 5 的补码进行加法运算。
  2. 可以避免出现“0”的两种表示形式。在补码表示法中,+0 和 -0 的补码都是 00000000,统一了“0”的表示。
  3. 补码的范围比原码和反码更合理。对于 n 位二进制数,原码和反码的表示范围是 -2^(n-1)+1 到 2^(n-1)-1,而补码的表示范围是 -2^(n-1)到 2^(n-1)-1,更加对称和合理。

十进制数转二进制

以下是不同类型的数转换为二进制的方法:

一、正整数转二进制

使用除 2 取余法,具体步骤如下:

  1. 用该正整数除以 2,取余数。
  2. 再用商继续除以 2,取余数。
  3. 重复这个过程,直到商为 0。
  4. 最后将所有余数从下往上排列,就是该正整数的二进制表示。

例如,将十进制数 10 转换为二进制:
10÷2 = 5……0
5÷2 = 2……1
2÷2 = 1……0
1÷2 = 0……1
所以 10 的二进制表示为 1010。

二、负整数转二进制

  1. 先将对应的正整数转换为二进制。
  2. 然后对其取反(所有位 0 变 1,1 变 0)。
  3. 最后加 1 得到负数的二进制表示。

例如,将十进制数 -10 转换为二进制:
10 的二进制是 1010,取反后为 0101,加 1 后为 0110,所以 -10 的二进制表示为 10110(通常用补码表示)。

三、正小数转二进制

使用乘 2 取整法,具体步骤如下:

  1. 用小数部分乘以 2,取整数部分。
  2. 再用剩下的小数部分继续乘以 2,取整数部分。
  3. 重复这个过程,直到小数部分为 0 或者达到所需的精度。
  4. 最后将取出的整数部分从上往下排列,就是该正小数的二进制表示。

例如,将十进制数 0.625 转换为二进制:
0.625×2 = 1.25,取整数部分 1。
0.25×2 = 0.5,取整数部分 0。
0.5×2 = 1.0,取整数部分 1。
此时小数部分为 0,所以 0.625 的二进制表示为 0.101。

四、负小数转二进制

  1. 先将对应的正小数转换为二进制。
  2. 然后对其取反(所有位 0 变 1,1 变 0)。
  3. 最后加 1 得到负数小数的二进制表示(通常也用补码表示)。

例如,将十进制数 -0.625 转换为二进制:
0.625 的二进制是 0.101,取反后为 1.010,加 1 后为 1.011,所以 -0.625 的二进制表示为 1.011(补码形式)。需要注意的是,负小数的二进制表示在计算机中通常也以特定的格式存储和运算,具体的解释可能会因计算机系统和应用场景而有所不同。


http://www.mrgr.cn/news/49650.html

相关文章:

  • C语言 | Leetcode C语言题解之第477题汉明距离总和
  • Python列表专题:list与in
  • C++ | Leetcode C++题解之第477题汉明距离总和
  • 第十届MathorCup高校数学建模挑战赛-D题:基于统计回归模型的新零售企业精准需求预测研究(续)(附MATLAB代码实现)
  • AI智能助理在企业内部的8大应用场景
  • HPMicro:PWM双更新
  • 智能EDA小白从0开始 —— DAY21 工作流程
  • [机械制造] 金属加工工艺:铁锤
  • C++ 匿名对象(没有名字的对象,类似于临时对象)
  • 计组_异常和中断
  • React中的useState和useEffect解析
  • QT QML 练习1
  • nginx使用手册<一>
  • Oracle漏洞修复 19.3 补丁包 升级为19.22
  • 噪声分布 双峰,模拟函数 或者模拟方法 python人工智能 深度神经网络
  • 大数据开发工程师的岗位技能要求及自我介绍参考(持续更新)
  • RTOS实时系统-信号量如何确保一次只有一个任务可以访问某个资源
  • 目标检测系统【环境详细配置过程】(CPU版本)
  • 架构师备考-背诵精华(架构开发方法)
  • 城域网——IP城域网、城域以太网、光城域网