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

devtools/2024/10/18 3:13:14/

文章目录

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

三码互转

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

一、原码

  1. 概念

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

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

二、反码

  1. 概念

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

三、补码

  1. 概念

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

四、补码的优势

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

  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.ppmy.cn/devtools/125525.html

相关文章

鸿蒙NEXT开发-动画(基于最新api12稳定版)

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

Python笔记之识别到当前python脚本所在的目录,而不是执行python命令的目录

Python笔记之识别到当前python脚本所在的目录,而不是执行python命令的目录 code review! 文章目录 Python笔记之识别到当前python脚本所在的目录,而不是执行python命令的目录1.题解2.在脚本所在的目录后面拼接下一层目录 1.题解 要在Python脚本中识别到…

前端发送了请求头的参数,经debug发现后端请求对象请求头中没有该参数

debug测试,发现前端发来请求头中确实没有找到添加的请求头参数,但是 Network 中却显示请求头中有该参数信息。 原因是RequestHeaders中设置的请求参数含有下划线,NGINX将静默地丢弃带有下划线的HTTP标头,这样做是为了防止在将头映…

React 为什么引入 Hooks ?

1. 简化状态管理和副作用 Hooks 允许你直接在函数组件中处理状态和副作用,无需类和复杂的生命周期方法。 2.逻辑拆分与重用 通过自定义 Hooks,你可以将复杂的逻辑拆分成小的可重用单元,从而使代码更简洁、可读。 3. 常见 Hooks 示例 use…

CountUp.js 实现数字增长动画 Vue

效果&#xff1a; 官网介绍 1. 安装 npm install --save countup.js2. 基本使用 // template <span ref"number1Ref"></span>// script const number1Ref ref<HTMLElement>() onMounted(() > {new CountUp(number1Ref.value!, 9999999).sta…

机器学习(10.7-10.13)(Pytorch LSTM和LSTMP的原理及其手写复现)

文章目录 摘要Abstract1 LSTM1.1 使用Pytorch LSTM1.1.1 LSTM API代码实现1.1.2 LSTMP代码实现 1.2 手写一个lstm_forward函数 实现单向LSTM的计算原理1.3 手写一个lstmp_forward函数 实现单向LSTMP的计算原理总结 摘要 LSTM是RNN的一个优秀的变种模型&#xff0c;继承了大部分…

架构设计笔记-15-面向服务架构设计理论与实践

目录 知识要点 案例分析 1.微服务架构 2.微服务 3.微服务架构 4.SOA与微服务 5.基于微服务架构的系统/传统单体式系统 论文 1.论微服务架构及其应用 知识要点 服务组件体系结构&#xff08;Service Component Architecture&#xff0c;SCA&#xff09;是面向服务体系…

高防服务器为何有时难以防御CC攻击及其对策

高防服务器通常被用来抵御各种类型的DDoS攻击&#xff0c;包括CC&#xff08;Challenge Collapsar&#xff09;攻击。然而&#xff0c;在某些情况下&#xff0c;即使是配备了高级防护措施的高防服务器也可能难以完全防御CC攻击。本文将探讨导致这一现象的原因&#xff0c;并提供…