计算机原码,反码,补码,以及之间的转换 ,计算机底层为什么要用二进制反码和二进制补码

2023-11-13

1.为什么要使用二进制?

首先我们需要知道:

计算机底层的存储方式:所有数字在计算机底层都以二进制形式存在。

二进制数据的存储方式:所有的数值,不管正负,底层都以补码的方式存储。

二进制是机器语言,由于计算机并不能像人一样计算与思考,而使用二进制,仅用0、1来表示,0和1分别表示高低电频,使计算机处理起来更方便也更加高效。

2.关于原码,反码,补码,以及之间的转换:

十进制中的正数转换为二进制后原码,反码,补码都相同。 以下讨论为负数时的情况:

原码:直接将一个数值转换为二进制,最高位是符号位。符号位正数为0,负数为1。

反码:除符号位,对原码进行按位取反。

补码:该数值的反码+1。

eg:数值:-14

原码:    10000000 00000000 00000000 00001110    

反码:    11111111 11111111 11111111 11110001    除符号位按位取反

补码:    11111111 11111111 11111111 11110010    反码基础上加一

我们已经知道了原码-->反码-->补码 的转换。

接下来了解从补码转换成原码

方法一:逆运算法:补码先进行减一操作,除符号位再按位取反。

方法二:对补码直接进行再补码,得到的是原码。

数值:-14

补码:    11111111 11111111 11111111 11110010

方法一:
减一:    11111111 11111111 11111111 11110001

取反:    10000000 00000000 00000000 00001110   =-14

方法二:
取反:    10000000 00000000 00000000 00001101

加一:    10000000 00000000 00000000 00001110   =-14    

十进制转换为二进制的转换:

方法:除二取余的逆

eg:数值:13

        13        余数
    /2   6          1
    /2   3          0
    /2   1          1
    /2   0          1

    取余的逆:1101

3.为什么要使用原码、反码、补码?

首先我们知道了计算机底层是通过二进制进行存储的,并且存储的方式也是补码形式存在的,那么我们先通过计算机的一种方式来进行思考,因为只有 0、1 两种信号方式,那么在进行运算时,加减乘除已经是最基本的运算,并且由于第一位是符号位,计算机不能像人脑一样识别并对之后的值进行运算,那么在设计计算机的时候就应该对计算方式尽量简化,以达到高效识别并运算于是我们通过反码,补码的形式,让符号位也参与运算。目的:让计算机运算更加简便,而且让符号位也参加运算

首先,在我们的数学中,2-1=2+(-1)。那么如果通过这种思想,我们可以让计算机只有加法,那么会简便很多,并且会简化计算机的冗余。

3.1为什么不使用原码计算?

eg:      2+(-1)

如果通过原码计算:
    00000000 00000000 00000000 00000010    2
   +10000000 00000000 00000000 00000001  +-1
   =10000000 00000000 00000000 00000011  =-3

如果通过反码计算:
    00000000 00000000 00000000 00000010    2
   +11111111 11111111 11111111 11111110  +-1        (在计算时,高位溢出后在低位上补)
   =00000000 00000000 00000000 00000001  = 1

如果通过补码计算:
    00000000 00000000 00000000 00000010    2
   +11111111 11111111 11111111 11111111  +-1        (在计算时,高位溢出后就忽略不计)
   =00000000 00000000 00000000 00000001  = 1

首先通过原码计算已经得出,在有负数的情况下,结果是不对的,所以不采用原码。

那么,反码和补码结果都对时,为什么不使用反码呢?

下面我们来看一个例子:

eg:1+(-1)

使用反码计算:

    00000000 00000000 00000000 00000001    (反码)    1
   +11111111 11111111 11111111 11111110    (反码)  +-1
   =11111111 11111111 11111111 11111111    (反码)
   =10000000 00000000 00000000 00000000    (原码)  =-0

从例子中可以看出,1+(-1)=-0 ,而我们的常识中0是偶数,是不分正负的。

于是问题出现:两个编码同时表示0。[10000000 00000000 00000000 00000000] 与[00000000 00000000 00000000 00000000]

那么我们再来看补码:

eg:1+(-1)
使用补码进行计算:
    00000000 00000000 00000000 00000001    (1的补码)
   +11111111 11111111 11111111 11111111    (-1的补码)
   =00000000 00000000 00000000 00000000     =0

 于是通过补码我们找到更好的解决方式来解决编码问题,解决了两个编码表示零的问题,并且我们把在反码中的-0用来表示最低数,例如,byte中用[10000000]表示-128,用[00000000]表示0。最终:通过补码, 我们修复了由于0而存在的符号问题以及存在两个编码的问题, 并把-0用来表示一个最低数。

4.解惑:byte的取值范围为什么是 -128~127.

首先byte是由8位二进制来表示:

那么2^8=256,但是我们不仅要表示正数还要表示负数,那么为什么是-128~127呢?

因为我们需要一半用来表示正数,一半用来表示负数。那么,第一位叫符号位,之后的都是真值,最大为01111111=127.               而11111111表示的是-127。用000000000表示0,用10000000表示-128(此时-128是没有原码和补码的)。

11111111转为二进制是-127(第一位是符号位),-128又是如何表示的呢?

解答:

首先第一位是符号位,不进行表示数值,那么仅有后七位来进行表示数值,但是通过补码的使用,解决了。

如果觉得我解释的不够清楚,推荐看这一篇:计算机底层基础----原码、反码、补码以及为什么要用反码和补码_libraryhu的专栏-CSDN博客

如果觉得这篇文章有帮到你,希望能给个小小的赞,谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机原码,反码,补码,以及之间的转换 ,计算机底层为什么要用二进制反码和二进制补码 的相关文章

  • FPGA设计篇之流水线思想

    FPGA设计篇之流水线思想 一 写在前面 二 正文开始 2 1举个栗子 2 2 1情况一 组合逻辑 2 1 2情况二 流水线设计 2 1 4 小总结 2 2举第二个栗子 写在最后 一 写在前面 流水线 大家好 我是富土康三号流水线的张全蛋
  • Verilog的奇技淫巧[更新中]

    1 Verilog常用的数据选择语句vect a b 或vect a b 转载自 MDY常用的数据选择语句Verilog明德扬论坛 Powered by Discuz vect为变量名字 a为起始位置 加号或者减号代表着升序或者降序 b是进
  • MIPI D-PHY介绍(二) FPGA

    MIPI D PHY介绍 二 FPGA 随着移动设备的广泛普及 MIPI D PHY作为其最主要的物理层标准之一 被越来越多地使用在各种嵌入式系统中 本文将详细介绍MIPI D PHY的工作原理和在FPGA设计中的实现方法 MIPI D P
  • Verilog实例-AMBA(AHB)协议

    目录 一 简介 1 1 AHB 1 2 signal list 1 3 Bus interconnection 总线互联 1 4 Overview of AMBA AHB operation 1 4 1 Basic transfer 1 4
  • 紫光同创 FPGA 开发跳坑指南(三)—— 联合 Modelsim 仿真

    Modelsim 是 FPGA 开发中重要的 EDA 设计仿真工具 主要用于验证数字电路设计是否正确 紫光 Pango Design Suite 开发套件支持联合 Modelsim 仿真 这里作简要的介绍 添加仿真库 方法一 打开 Pang
  • 【科普】波特率和比特速率的理解

    什么是波特率 单位时间内传输的码元个数称为波特率 单位为 Baud 那码元又是什么呢 码元又称为 符号 即 symbol 维基百科上对码元的解释 持续一段固定时间的通信信道有效状态就是码元 这么解释比较抽象 可以解释码元的物理意义 在通信信
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • 手把手教你Modelsim仿真【2020.4版本】

    首先新建一个文件夹 test5 打开Modelsim 依次选择 File gt Change Directory 把目录选择到创建的 test5 文件夹 创建库 依次选择 File gt New gt Library 一般我们选择第三个 库
  • 关于Keil中Memory中观察不到数据变化的问题以及启动文件栈的初始化

    关于Keil中Memory中观察不到数据变化的问题 在KEIL中观察Memory数据变化 一定要记得只能在RAM地址或ROM之内观察 如下图所示 RAM的地址设置在地址为0x20000000开始的地方 大小为0x20000 因此只有在这个范
  • 最详细的Vivado安装教程

    V i v a d o 安 装
  • Verilog实现两路组相联cache

    cache代码 timescale 1ns 1ps cache共32块 分为16组 每组2块 即两路组相联 1块 4字 1字 4字节 主存共1024块 4096个字 主存地址共12位 1 0 为块内偏移 5 2 为组地址 11 6 为Tag
  • 【Xilinx DDR3 MIG】Xilinx FPGA DDR3读写实验相关用户接口引脚解释

    目录 DDR3读写实验 实验框图 时钟模块 DDR3读写及LED指示模块 MIG IP核 用户接口解释
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • 【FPGA】面试问题及答案整理合集

    面试问题及答案整理合集 1 硬件描述语言和软件编程语言的区别 2 FPGA选型问题 3 建立时间和保持时间问题 3 亚稳态问题 4 竞争和冒险问题 5 乒乓操作问题 6 同步和异步逻辑电路 7 同步复位和异步复位 8 MOORE 与 MEE
  • Verilog HDL——Modelsim仿真

    常用testbench语法 finish 和 stop finish任务用于终止仿真并跳出仿真器 stop任务则用于中止仿真 timescale time unit time precision time unit指定计时和延时的测量单位
  • 蓝桥杯真题:迷宫

    目录 题目描述 运行限制 dfs bfs 结果 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 11 的为障碍 标记为 00 的为可以通行的地方 010000 000
  • 基于FPGA的AHT10传感器温湿度读取

    文章目录 一 系统框架 二 i2c接口 三 i2c控制模块 状态机设计 状态转移图 START INIT CHECK INIT IDLE TRIGGER WAIT READ 代码 四 数据处理模块 串口 代码 五 仿真 testbench设
  • 画时序图软件——TimeGen和Timing Designer下载

    在写实验报告的时候需要画波形图 但是手头没有很好的软件 就上网搜了一些 分享出来 这里分享的是TimeGen和Timing Designer两个软件 资源均来自网上 有侵权请联系 TimeGen使用和安装都比较简单 我发的应该里面有破解方法
  • 【ZYNQ学习】PL第一课

    这节课讲什么 这节课的名字本来是想写为LED 但这一课里除了LED也有按键 又想换为GPIO控制 但关于PL的GPIO控制 不应该这么草率和简单 而且这一课有很多和ZYNQ或者PL关联性不强的东西要说 所以我写了删删了写改了好几遍 终于定为
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步

随机推荐