比特听命:补码的产生过程与整数在计算机中的存储

news2024/11/28 14:45:51

文章目录

  • 参考
  • 环境
  • 声明
      • 八位二进制加法器
      • 八进制数值
  • 原码
      • 概念
      • 正负数与零
      • 正数与负数的运算
  • 反码
      • 概念
      • 一步之遥
  • 补码
      • 概念
      • 唯一的零
      • 加法运算
  • 补码的优缺点
      • 优点
          • 简化算术运算
          • 一眼辨别正负性
          • 运算过程中无需对符号位进行处理
      • 缺点
          • 不易阅读

参考

项目描述
搜索引擎BingGoogle
AI 大模型文心一言通义千问讯飞星火认知大模型ChatGPT
哔哩哔哩看得视频太多😭

环境

项目描述
PHP5.5.05.6.87.0.07.2.57.4.98.0.08.2.9
PHP 编辑器PhpStorm 2023.1.1(专业版)
绘图工具draw.io 21.7.5

声明

八位二进制加法器

八位二进制加法器是一种 电子电路,用于 执行两个八位二进制数的加法操作。这种加法器可以将两个八位的二进制数相加,得出一个八位的二进制和。对此,请参考如下示例:

   A:  1 0 1 1 0 1 0 1
   B:  0 1 1 0 1 0 1 1
-----------------------
Sum:  1 1 0 1 1 1 0 0

在这个示例中,每一位的相加操作都遵循标准的二进制加法规则,包括 进位。如果两个位相加后的和大于 1,那么就会产生进位,这个进位会被加到下一位的操作中。如果进位将被应用在第九位二进制位中,则该进位将被抛弃

八进制数值

在本篇文章中,我们都将 模拟八位二进制加法器进行加法操作。故将整数表示为八位二进制数,这并 不意味着 采用原码、反码及补码 仅能够 用于将整数转化为 八位 二进制数。

原码

概念

原码是一种整数的二进制表示方法,也被称为 符号-数值表示法。原码主要用于表示 有符号整数(正数、负数和零),在计算机系统中广泛使用。

在二进制数的原码表示中,二进制数被分为了 两部分,即 符号位数值具体数值

  1. 符号位
    原码的 最高位 是符号位。符号位用来表示数值的 正负性0 表示正数,1 表示负数。
  2. 具体数值
    符号位之后的二进制数字均用于表示具体数值。

举个栗子

数值 2 采用七位二进制数表示为 0000010。若需要表示数值的 正负性,则 在二进制数的最高位前 添加一个二进制位。若该二进制位存放数字 1,则该二进制数值表示十进制数 -2;若该二进制位存放数字 0,则该二进制数值表示十进制数 2

正负数与零

零既不是正数,也不是负数。使用原码表示数值存在缺陷,即 零有了正负性,存在正零与负零。
在原码表示法中,由于我们直接使用 二进制数的最高位作为符号位,因此当其他所有二进制位都为 0 时,我们会得到数值零的两种不同表示,即 正零负零。这显然是不合理的。表示零的 冗余性 是原码的主要缺陷之一,也是计算机 不使用原码存储整数的原因之一

正数与负数的运算

原码能够表示正负数,但在进行正数与负数的加法运算时会出现问题。对此,请参考如下示例:

已知 +2 的二进制表示为 00000010,而 -2 的二进制表示为 10000010。两者进行加法,

00000010
10000010
---------
10000100

得到的结果为 10000100,转化为十进制数为 -4+2-2 相加,结果应为零,但却得到了 -4。原码能够表示正数、负数与零,但 无法正确处理正数与负数的加法运算,这是计算机 不使用原码存储整数的另一原因

反码

概念

反码同原码一般,均用于 有符号十进制整数的二进制表示反码基于原码 得来,对于正数与负数,得到反码的方式存在如下不同:

  1. 正数的反码即其原码。
  2. 负数的反码是其原码中除符号位外的二进制位 按位取反(每一个二进制数,由 0 变 1 或 由 1 变 0)得来。

举个栗子

+5 的反码表示为:00000101
-5 的原码表示为:10000101
-5 的反码表示为:11111010                                 

一步之遥

反码与原码具有相同的缺陷,均存在两种表示零的方式,即正零与负零。+0 的反码表示为 00000000-0 表示为 11111111


反码可以实现 正数与负数负数与负数之间的加法运算。对此,请参考如下示例:

举个栗子

+3 的反码表示为:00000011
-5 的反码表示为:11111010
两者相加:
00000011
11111010
---------
11111101

得到的 11111101 是结果的反码表示,我们需要将其进行 逆反码运算。尝试将除符号位外的二进制位按位取反,可得 10000010,转化为十进制数值,结果为 -2

补码

概念

在计算机中,整数的存储通常采用其补码表示。补码同反码与原码一般,均用于 有符号十进制整数的二进制表示补码基于反码 得来,对于正数与负数,得到补码的方式存在如下不同:

  1. 正数的补码、原码与反码均相同。
  2. 负数的补码为其 反码 + 1

唯一的零

在有符号的十进制整数的补码表示中,零的表示方式只有一种,即 00000000
通过对负数的反码进行 +1 的操作,-0 的反码表示由 11111111 变为了 100000000,第九位二进制数 1 由于没有地方安放,故被抛弃。于是 0 只存在 00000000 这一种表示。

加法运算

在进行 补码之间的加法运算 后,得到的结果需要进行 逆补码运算 以求得人类容易理解的二进制表示,方便将结果转化为 十进制数值。对此,请参考如下示例:

+3 的补码表示为:00000011
-5 的补码表示为:11111011
两者相加:
00000011
11111011
---------
11111110

得到的 11111110 是结果的补码表示。为方便将其转化为正确的十进制数,我们需要 对其进行逆补码运算以求得其原码表示。首先对 11111110 进行 -1 处理得到 11111101,再 对除符号位外的二进制位进行按位取反运算 得到 10000010,转化为十进制数得到最终结果 -2

补码的优缺点

优点

简化算术运算

通过将整数转化为二进制的补码表示,加法和减法运算便可以 使用相同的硬件电路进行处理。当进行 两个正整数的减法运算 时,只需要 将减数理解为负数 再与被减数进行加法运算即可。对此,请参考如下示例:

10 - 5 = ?
上述表达式可以理解为:
10 + (-5) = ?
只需将减数 5 理解为 (-5) 便可将减法运算转化为加法运算。

使用 相同的硬件电路进行加法与减法的处理 能够带来如下优点:

  1. 硬件简化
    当加法和减法使用相同的电路时,可以 减少计算机中所需的硬件组件数量,这降低了系统的成本和复杂度。

  1. 节省空间
    由于只需要一个通用的加法电路,计算机的物理尺寸可以更小。这对于嵌入式系统和移动设备非常重要,因为它们通常具有有限的空间。
  2. 降低功耗
    使用相同的硬件电路执行加法和减法操作可以 降低功耗。这对于移动设备等电池供电的系统来说尤为重要,因为降低功耗可以 延长电池寿命提高设备的续航能力
  3. 提高性能
    使用相同的硬件电路可以提高计算机的性能,因为该电路 可以被高度优化和并行化,以加快算术运算速度。
一眼辨别正负性

由于补码的 最高位为符号位,表示着数值的正负性。故只需要观察补码的最高位存放的是二进制数 1 还是 0,便可确定该数值的 正负性

运算过程中无需对符号位进行处理

在进行不同或相同(正负性)符号 的补码运算时,无需对符号位进行特殊处理,符号位与补码中的其他二进制位可一同进行加法或减法运算。

缺点

不易阅读

在进行加或减的补码运算后,得到的结果是其补码表示。若需要自行将其转化为十进制数,往往需要先通过 逆补码运算,即 进行补码到原码的还原过程。在得到原码后便可 轻松的 将其转化为十进制数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c#设计模式-行为型模式 之 访问者模式

🚀简介 封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 访问者模式包含以下主要角色 : 抽象访问者(Visitor)角色:定义了对每一个元素 (E…

英语——语法——从句——句型和句子成分——笔记

老师导言:易于理解。 三种句型:1、主系表;2.主谓*;3.there be 句型:句子构成的形式。句子用于相互沟通,需要表达自己意思,句子中就存在一个主语,一般对主语(主要描述对象…

4.Mask R-CNN/YOLOV8/RTMDET三种实例分割方法推理逻辑对比

文章目录 Mask R-CNN/YOLOV8/RTMDET三种实例分割方法推理逻辑对比Mask R-CNNYOLOV5/8实例分割方法RTMDet中的实例分割 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 Mask R-CNN/YOLOV8/RTMDET三种实例分割方法推理逻辑对比 实例分割是同…

CLIP模型原理与代码实现详解

文章目录 前言一、CLIP模型原理1.背景介绍2.对比训练方式3.prompt推理方式4.图像与文本编码结构5.特征CLS token结构vit划分patch原理cls token原理 二、CLIP环境安装1.官方环境安装2.CLIP环境安装3.CLIP运行结果 三.CLIP的Transformer结构代码解读四、CLIP模型主函数代码解读五…

相似性搜索:第 4 部分--分层可导航小世界 (HNSW)

SImilarity 搜索是一个问题,给定一个查询的目标是在所有数据库文档中找到与其最相似的文档。 一、介绍 在数据科学中,相似性搜索经常出现在NLP领域,搜索引擎或推荐系统中,其中需要检索最相关的文档或项目以进行查询。在大量数据中…

从0开始学go第八天

gin获取URL路径参数 package main//获取path(URL)参数 import ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/:name/:age", func(c *gin.Context) {//获取路径参数name : c.Param(&quo…

15 | JPA 对 Web MVC 开发者做了哪些支持

我们使用 Spring Data JPA 的时候,一般都会用到 Spring MVC,Spring Data 对 Spring MVC 做了很好的支持,体现在以下几个方面: 支持在 Controller 层直接返回实体,而不使用其显式的调用方法;对 MVC 层支持标…

如何通过Photoshop将视频转换成GIF图片

一、应用场景 1、将视频转有趣动图发朋友圈 2、写CSDN无法上传视频,而可以用GID动图替代 3、其他 二、实现步骤 1、打开Photoshop APP 2、点击文件——导入——视频帧到图层 3、选择视频文件 4、配置视频信息,按照图片提示配置完毕之后,…

gma 2.0.2 (2023.10.15) 更新日志

安装 gma 2.0.2 pip install gma2.0.2新增 0.1、矢量提取(重要更新) (见简单示例)   现在,你可以像 numpy 或 pandas 一样直接对 Layer 进行切片提取。 0.2、修改属性表(重要更新) &#xff…

数电第一次实验

四选一,信号选择器 三位4选1多路选择器 要求输入信号有4个,且每个信号宽3位 如果是直接根据选择信号选 选择的是信号,选择的是编号,与信号具体是什么内容无关,信号的内容与其是否被选择无关,信号的编号…

E034-服务漏洞利用及加固-利用CVE-2016-5195漏洞实现Linux系统本地提权

实验等级: 中级 任务场景: 【任务场景】 小王接到磐石公司的邀请,对该公司内部网络进行渗透测试,经过对局域网被操作系统进行全面的维护中,发现了一台内核版本为4.2.0-27的Linux服务器,低权限用户利用该漏洞技术可以在全版本L…

【笔记整理】软考-软件设计师

一、计算机系统 计算机基本单位 单位名称简称换算位bitb字节byteB1B8b千字节KB1KB1024B兆字节MB1MB1024KB吉字节GB1GB1024MB太字节TB1TB1024GB 带宽单位Mbps的b是指Bit(位) 速度单位MB/s的B是指Byte(字节) 1MB/s=8M…

Android 10.0 禁止弹出系统simlock的锁卡弹窗功能实现

1.前言 在10.0的系统开发中,在一款产品中,需要实现simlock锁卡功能,在系统实现锁卡功能以后,在开机的过程中,或者是在插入sim卡 后,当系统检测到是禁用的sim卡后,就会弹出simlock锁卡弹窗,要求输入puk 解锁密码,功能需求禁用这个弹窗,所以就需要看是 哪里弹的,禁用…

04-React脚手架

04-React脚手架 1. react脚手架入门 1).脚手架的介绍 xxx脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置(语法检查、jsx编译、devServer…)下载好了所有相关的依赖可以直接运行一个简单效果 react提供了一个用于创建rea…

R/d2及S/C4估计总体标准差,比较其CPK及规格限概率的差异

R/d2 和 S/C4 是用于估计总体标准差的无偏估计方法,通常用于控制图中。这些估计方法的主要目的是通过样本数据来估计总体标准差,以便监测过程的稳定性和变异性,而不需要收集整个总体的数据。 具体来说: R图中的 R/d2 和 S图中的…

【JAVA】有关包的概念

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 前言 Java包是用于组织和管理Java类的方式。它们提供了一种命名空间,以避免名称冲突,并使程序的组织更加有效和可维护。今天我们接着来学习有关包的概念。 包 …

faster lio 回环 加入GTSAM优化的记录

首先感谢这位博主的文章:https://blog.csdn.net/weixin_41281151/article/details/125371285,其中部分代码参考于改博主中的github: https://github.com/kahowang/FAST_LIO_SAM 不同的是,我使用的是faster lio进行更改&#xff0c…

vscode键盘输入不进去

二话不说,直接把输入切换到终端输出即可! 打开设置,搜索terminal,切换到run in terminal 即可!

C语言-指针相关使用

指针是 C语言的重要组成部分,是 C语言的核心、精髓。 在 C语言中,指针使用得当,能显著提高某些程序的效率,使用不当,则很容易造成系统错误、 一、指针使用 编译系统为每个变量都分配了一个能满足其类型大小的内存单…

vqvae简单实战,利用vqvae来提升模型向量表达

最近CV领域各种大模型在图像生成领域大发异彩,比如这两年大火的dalle系列模型。在这些模型中用到一个基础模型vqvae,今天我们写个简单实现来了解一下vqvae的工作原理。vqvae原始论文连接https://arxiv.org/pdf/1711.00937.pdf 1,代码 首先我们…