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

【计算机组成原理】详细解读带符号整数在计算机中的运算

有符号整数的运算

  • 导读
  • 一、补码的优势
  • 二、补码的加法运算
  • 三、补码的减法运算
  • 四、原码、反码、补码的特性
  • 结语

封面

导读

大家好,很高兴又和大家见面啦!!!

经过前面的介绍,我们已经初步认识了有符号整数的三种表示形式:

  • 原码——用机器数的最高位表示符号,其余位表示数值。
    • 符号位为0,表示正数
    • 符号位为1,表示负数
    • n n n 位机器数对应的取值范围: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 (2n11)2n11
  • 反码——原码符号位不变,数值位按位取反。
    • 反码常用于数码变换的中间表示形式
    • n n n 位机器数对应的取值范围: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 (2n11)2n11
  • 补码——反码+1
    • 有符号整数在计算机中的存储形式
    • 补码的符号位参与运算
    • n n n 位机器数对应的取值范围: − 2 n − 1 ~ 2 n − 1 − 1 -2^{n-1}~2^{n-1}-1 2n12n11

在接下来的内容中,我们将会进一步的深入探讨原、反、补这三种表现形式的内容。今天我们将会从最简单的有符号整数的运算开始介绍。

在前面我们有提到过,有符号整数在通过原码进行运算时,会存在一些问题:

  • 两个不同符号的加法运算(或同符号的减法运算),需要完成三步运算:
    • 比较两个值的绝对值大小
    • 用绝对值大的数减去绝对值小的数
    • 给运算结果选择合适的符号
  • 两个同符号的加法运算(或不同符号的减法运算),需要完成三步运算:
    • 减法运算改为加法运算,即加上被减数的相反数
    • 从右到左,数值位逐位相加,符号位不参与运算
    • 符号位取左操作数的符号

可以看到,同样是加减法运算,仅仅因为加减法的对象不同,其运算的方式却有差异,为了提高运算的效率,降低硬件的开发成本,于是便有了补码,那么在有符号的整数中,其补码形式又是如何进行运算的呢?下面我们就一起来探讨一下补码的加减运算;

一、补码的优势

在原码的运算中,由于机器数的最高位表示的是符号位,并且符号位不参与运算,因此实际在进行运算的只有除符号位以外的数值位,而运算结果的符号,还需要根据结果进行判断,这就导致其运算过程变的及其复杂;

但是在补码的运算中符号位要参与运算,此时我们就不需要再去考虑结果的符号,正常的完成运算后,运算结果的符号也就同时确定了下来,这样就大大降低了运算的难度。

而且真值0的原码表示有 [ + 0 ] 原 = 0 , 0000 [+0]_原=0,0000 [+0]=0,0000 [ − 0 ] 原 = 1 , 0000 [-0]_原=1,0000 [0]=1,0000 两种形式,而在补码中,真值0的补码只有 [ 0 ] 补 = 0 , 0000 [0]_补=0,0000 [0]=0,0000 一种形式,并且补码相比于原码还能够多表示一位负数 − 2 n − 1 -2^{n-1} 2n1

从这几点来看,有符号整数以补码的形式进行存储,并通过补码运算的优势还是很明显的。

二、补码的加法运算

有符号整数的补码加法规则很简单,从右到左,依次相加,逢二进一,如下所示:

补码的加法
可以看到,整个过程并不复杂,并且这个过程有细心的朋友就会发现,除了后续的补码转换成原码之外,整个加法运算的过程是和无符号整数的加法是一样的。那么这个补码的运算是否和无符号整数的运算有联系呢?

在无符号整数的运算中我们就有介绍过,计算机中,减法电路的造价会高于加法电路的造价,因此,为了节约开发成本,计算机中的减法都会以加法的形式来完成,这里就包括有符号整数的加法。

那在有符号整数中的减法是如何实现的呢?下面我们就来继续探讨一下有符号整数的减法;

三、补码的减法运算

有符号整数的减法实际上和无符号整数的减法一样,在式子 A − B A-B AB 中都是选择将减数 B B B 按位取反,末位+1,注意这里的按位取反是连同符号位一起按位取反,如下所示:

补码的减法
当完成转换后我们会发现,最终得到的这个数值应该是减数的相反数,为什么会这样呢?

其实这里很好理解,我们要注意看减数的这一步转换是如何执行的:

  • 先转换数值位:按位取反,末位+1,这个一步转换获取的减数对应的原码
  • 再转换符号位:按位取反,此时负数变成了正数

这么一看,经过这一步换算之后,原数的相反数了吗。这时有朋友就会说了,你这是负值的转换,当然没问题了,那正值呢?

这个问题问的非常好,对于正数而言,它的转换过程如下所示:

  • 先转换符号位:按位取反,此时整数变成了负数
  • 再转换数值位:按位取反,末位加1,此时获取的是负数的补码

补码的减法

从正数的转换来看,我们把这种转换成为获取减数的相反数似乎是不太准确的,更准确的说法应该是相反数的补码:

  • 正数:获取的是其对应负数的补码
  • 负数:获取的是其对应正数的补码

在完成转换后,此时的减法也就变成了加法,其运算规则为:从右到左,逐位相加,逢二进一。

现在大家有发现什么吗?

没错,当有符号整数以补码的形式进行运算时,其运算的过程与无符号整数的运算是一致的,也就是说,用补码的形式来存储有符号整数,在进行运算的时候,可以使用同一个电路来完成无符号整数和有符号整数的运算,而且还是使用造价低的加法电路,

四、原码、反码、补码的特性

接下来我们就来对原码、反码、补码的特性做个总结,以机器数为n位的机器为例,下面我们会从不同的方面来进行对比:

  • 真值0的表示形式
    • 原码:两种表示形式: [ + 0 ] 原 = 0 , 0000 [+0]_原 = 0,0000 [+0]=0,0000 [ − 0 ] 原 = 1 , 0000 [-0]_原 = 1,0000 [0]=1,0000
    • 反码:两种表示形式: [ + 0 ] 反 = 0 , 1111 [+0]_反 = 0,1111 [+0]=0,1111 [ − 0 ] 反 = 1 , 1111 [-0]_反 = 1,1111 [0]=1,1111
    • 补码:一种表示形式: [ 0 ] 补 = 0 , 0000 [0]_补 = 0,0000 [0]=0,0000
    • 无符号整数:一种表示形式: 000 … 000 000…000 000000
  • 最大值:
    • 原码: 2 n − 1 − 1 2^{n-1}-1 2n11
    • 反码: 2 n − 1 − 1 2^{n-1}-1 2n11
    • 补码: 2 n − 1 − 1 2^{n-1}-1 2n11
    • 无符号整数: 2 n − 1 2^n-1 2n1
  • 最小值:
    • 原码: − ( 2 n − 1 − 1 ) -(2^{n-1}-1) (2n11)
    • 反码: − ( 2 n − 1 − 1 ) -(2^{n-1}-1) (2n11)
    • 补码: − 2 n − 1 -2^{n-1} 2n1
    • 无符号整数: 0 0 0
  • 取值范围:
    • 原码: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 (2n11)2n11
    • 反码: − ( 2 n − 1 − 1 ) ~ 2 n − 1 − 1 -(2^{n-1}-1)~2^{n-1}-1 (2n11)2n11
    • 补码: − 2 n − 1 ~ 2 n − 1 − 1 -2^{n-1}~2^{n-1}-1 2n12n11
    • 无符号整数: 0 ~ 2 n − 1 0~2^n-1 02n1
  • 运算方式:
    • 原码:数值位运算,符号位不参与运算
    • 反码:不参与运算
    • 补码:数值位符号位都参与运算
    • 无符号整数:所有二进制位都参与运算

结语

今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《移码》的相关内容,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!

相关文章:

【计算机组成原理】详细解读带符号整数在计算机中的运算

有符号整数的运算 导读一、补码的优势二、补码的加法运算三、补码的减法运算四、原码、反码、补码的特性结语 导读 大家好,很高兴又和大家见面啦!!! 经过前面的介绍,我们已经初步认识了有符号整数的三种表示形式&…...

vue3常见的bug 修复bug

Vue 3 作为 Vue.js 的最新版本,在性能、开发体验以及代码可维护性等方面带来了显著的提升。然而,就像任何软件框架一样,Vue 3 在使用过程中也可能遇到一些典型的bug或问题。以下是一些可能遇到的典型问题: 响应式系统相关的问题&…...

C++课程笔记 类和对象

类概念 结构体&#xff1a;只要属性 类&#xff1a;有属性也有方法 c可以省略struct c不行 #include<iostream> using namespace std;typedef struct queue1 {int a;queue1 q() {queue1 q(2);return q;};queue1(){}queue1(int qa){a qa;} }q1; int main() {queue1 Q1;…...

提问即创作:用Prompt提示词引领AI灵感爆发

文章目录 &#x1f34a;AI内容创作的精髓&#xff1a;提示词Prompt1 什么是提示词工程?1.1 提示词是如何影响AI的输出结果?1.2 提示词的原理是什么1.3 提示词工程师的前景1.4 谁能成为提示词工程师&#xff1f;1.5 提示词的未来前景 2 提示词的基本书写技巧3 常见的提示词框架…...

一码空传临时网盘PHP源码,支持提取码功能

源码介绍 一码空传临时网盘源码V2.0免费授权&#xff0c;该源码提供了一个简单易用的无数据库版临时网盘解决方案。前端采用了layui开发框架&#xff0c;后端使用原生PHP编写&#xff0c;没有引入任何开发框架&#xff0c;保持了代码的简洁和高效。 这个程序使用了一个无数据…...

自然语言处理实战项目

自然语言处理实战项目 自然语言处理&#xff08;NLP, Natural Language Processing&#xff09;是人工智能的重要分支之一&#xff0c;致力于让计算机理解、生成并与人类进行语言交互。随着深度学习、神经网络和大数据的发展&#xff0c;NLP技术在近年来取得了飞跃性的进展&am…...

人工智能物联网的去中心化和分布式学习:全面综述、新兴挑战和机遇

这篇论文的标题是《Decentralized and Distributed Learning for AIoT: A Comprehensive Review, Emerging Challenges, and Opportunities》&#xff0c;作者是Hanyue Xu, Kah Phooi Seng, Li Minn Ang, 和 Jeremy Smith。论文发表在IEEE Access期刊上&#xff0c;接收日期为2…...

滑动窗口算法—最小覆盖子串

题目 ”最小覆盖子串“问题&#xff0c;难度为Hard&#xff0c;题目如下&#xff1a; 给你两个字符串 S 和 T&#xff0c;请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串&#xff0c;则算法返回空串&#xff0c;如果存在这样一个子串&#xff0c;则可…...

应用案例|开源 PolarDB-X 在互联网安全场景的应用实践

背景介绍 中盾数科集团始创于2012年&#xff0c;是由网络安全服务而发展起来的科技型、多元化的企业集团。旗下包括网络安全服务、信创一体化服务、箱式液冷、区块链、位置服务、视觉服务等六大板块&#xff0c;业务覆盖湖南、甘肃、贵州等多个省份。 业务挑战 中盾集团基于A…...

【大数据】MapReduce的“内存增强版”——Spark

【大数据】MapReduce的“内存增强版”——Spark 文章脉络 Spark架构 Spark-core SparkConf 和 SparkContext RDD Spark集群 Spark-sql 在大数据时代&#xff0c;数据处理和分析成为企业竞争的重要手段。Hadoop作为大数据处理的基石&#xff0c;其核心组件MapReduce在众多…...

o1模型:引领AI技术在STEM领域的突破与应用

o1模型是OpenAI最新推出的大型语言模型&#xff0c;它在多个领域展现出了卓越的能力&#xff0c;被认为是AI技术发展的一个重要里程碑。以下是对o1模型的详细介绍和分析&#xff1a; o1模型的简介和性能评估 o1模型在物理、化学、生物学等领域的基准任务上达到了博士生水平&…...

数据库系统 第57节 数据库迁移

数据库迁移是一个复杂的过程&#xff0c;涉及到将数据从一个数据库系统转移到另一个数据库系统。这个过程通常需要仔细规划和执行&#xff0c;以确保数据的完整性和可用性。以下是数据库迁移的一些关键方面&#xff1a; 数据迁移工具&#xff1a; 这些工具可以帮助自动化迁移过…...

【主机入侵检测】Wazuh规则详解

前言 Wazuh 规则是一组用XML格式编写的条件&#xff0c;它们定义了应该如何解释日志数据。这些规则由Wazuh Manager使用&#xff0c;用于在日志消息中检测特定的模式或行为&#xff0c;并相应地生成警报或响应。它们在威胁检测中扮演着至关重要的角色&#xff0c;因为它们允许系…...

redis有序集合写入和求交集的速度

背景 团队小伙伴做了一个需求。大概的需求是有很多的图片作品&#xff0c;图片作品有一些类别&#xff0c;每个人进入到每个类别的作品业&#xff0c;根据权重优先查看权重最高的的作品&#xff0c;权重大概是基于每个人对该作品的浏览计算&#xff0c;浏览过的作品放在最后展…...

微服务之服务注册与发现:Etcd、Zookeeper、Consul 与 Nacos 比较

在微服务架构中&#xff0c;服务注册与发现是实现服务动态管理和负载均衡的关键。本文将对四款主流的服务注册与发现工具——Etcd、Zookeeper、Consul、Nacos进行深入对比&#xff0c;从功能、性能、一致性、生态集成、应用场景等多个维度展开分析&#xff0c;帮助您选择最适合…...

桥接模式详解和分析JDBC中的应用

&#x1f3af; 设计模式专栏&#xff0c;持续更新中&#xff0c; 欢迎订阅&#xff1a;JAVA实现设计模式 &#x1f6e0;️ 希望小伙伴们一键三连&#xff0c;有问题私信都会回复&#xff0c;或者在评论区直接发言 桥接模式 文章目录 桥接模式桥接模式的四个核心组成&#xff1a…...

【python - 函数】

一、交互式会话 在与 Python 的交互式会话中&#xff0c;你可以在提示符 >>> 后键入一些 Python 代码&#xff0c;Python 解释器会读取并执行你键入的各种命令。 要启动交互式会话&#xff0c;请在终端 (Mac/Unix/Linux) 中键入 python3 或在 Windows 中打开 Python…...

scipy中稀疏矩阵特征值问题概述

在Python的scipy库中&#xff0c;这三种算法——ARPACK、LOBPCG、和AMG——都是用于求解稀疏矩阵特征值问题的数值方法。它们各自有不同的特性和适用场景&#xff0c;以下是详细说明&#xff1a; 1. ARPACK (Arnoldi Package) ARPACK&#xff08;Arnoldi Package&#xff09;…...

浅谈线性表——队列

文章目录 一、什么是队列&#xff1f;二、队列底层三、自我实现一个队列3.1、链式存储3.1.1、单向链表实现队列的实现代码3.1.2、双向链表实现队列的实现代码 3.2、顺序存储3.2.1、循环队列的实现代码 一、什么是队列&#xff1f; 队列是只允许在一端进行插入数据操作&#xf…...

2-94 基于matlab的最佳维纳滤波器的盲解卷积算法

基于matlab的最佳维纳滤波器的盲解卷积算法。维纳滤波将地震子波转换为任意所需要的形态。维纳滤波不同于反滤波&#xff0c;它是在最小平方的意义上为最 佳。基于最佳纳滤波理论的滤波器算法是莱文逊(Wiener—Levinson)算法。程序提供了4种子波和4种期望输出&#xff1a;零延迟…...

PySR社区贡献指南:如何参与这个革命性符号回归开源项目的开发

PySR社区贡献指南&#xff1a;如何参与这个革命性符号回归开源项目的开发 【免费下载链接】PySR High-Performance Symbolic Regression in Python and Julia 项目地址: https://gitcode.com/gh_mirrors/py/PySR 想要为高性能符号回归工具PySR做出贡献吗&#xff1f;这份…...

StructBERT中文Large模型技术白皮书精读:结构化预训练策略深度解读

StructBERT中文Large模型技术白皮书精读&#xff1a;结构化预训练策略深度解读 1. 项目概述与核心价值 StructBERT是由阿里达摩院开发的中文预训练语言模型&#xff0c;它在经典BERT架构基础上引入了结构化预训练策略&#xff0c;显著提升了中文语言理解能力。这个模型特别针…...

把 SAP Fiori 后端授权模型讲透:从 PFCG、Catalog 到 SU24 的一条完整链路

很多团队在上线 SAP Fiori 应用时,会把注意力集中在前端目录、磁贴和页面配置上,结果到了联调或上线阶段才发现:用户明明能看到应用入口,点击之后却报错;或者应用能打开,但列表为空;再或者少数用户能看到不该看的业务数据。问题往往不在 UI 本身,而在后端授权模型没有真…...

手把手教你用Swaks和Gophish绕过SPF,搭建自己的邮件钓鱼测试环境(附避坑指南)

企业级邮件安全测试实战&#xff1a;从SPF绕过到钓鱼环境搭建 邮件安全测试已成为企业安全防护体系中不可或缺的一环。据统计&#xff0c;超过90%的网络攻击始于钓鱼邮件&#xff0c;而其中近40%的成功攻击源于SPF配置不当或完全缺失。本文将系统性地介绍如何构建一个完整的邮件…...

华硕笔记本终极电池拯救指南:用G-Helper实现智能充电与健康修复

华硕笔记本终极电池拯救指南&#xff1a;用G-Helper实现智能充电与健康修复 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models …...

Stable Diffusion ComfyUI进阶:局部重绘与智能扩图的实战技巧与创意应用

1. 局部重绘的核心原理与实战技巧 局部重绘是Stable Diffusion ComfyUI中最实用的功能之一&#xff0c;它允许你在不改变整体构图的情况下&#xff0c;对图像的特定区域进行重新绘制。这个功能背后的技术原理其实很有意思——它利用了潜在空间&#xff08;latent space&#xf…...

学术风控新范式:陌讯 AIGC 检测论文 AI 代写识别技术详解

摘要&#xff1a;随着生成式人工智能&#xff08;AIGC&#xff09;技术的爆发式迭代&#xff0c;GPT-4、文心一言等大模型已能生成逻辑连贯、格式规范的学术论文&#xff0c;AI代写、AI润色过度等学术不端行为呈现隐蔽化、规模化趋势&#xff0c;传统查重工具难以应对这一新型学…...

python-flask-djangol框架的校园餐厅菜品自选系统

目录 技术选型核心功能模块数据库设计开发流程部署方案关键代码示例测试重点 项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 技术选型 使用Python的Flask或Django框架作为后端基础。Flask适合轻量级快速开发&#xff0c;Djan…...

Django REST framework的应用场景

目录一、鉴权开发框架介绍二、Django REST framework是什么三、如何实现认证、权限与限流功能四、Django REST framework的应用场景一、鉴权开发框架介绍 鉴权开发框架是一种用于实现身份验证和授权的软件开发工具。它可以帮助开发者快速构建安全、可靠的身份验证和授权系统&a…...

从“高危论文”到“安心提交”:百考通双降技术,为真实思考护航

在一个人工智能可以生成万字论文的时代&#xff0c;最讽刺的现实不是机器冒充人类&#xff0c; 而是人类因写得太像“人写的论文”&#xff0c;被当作机器。 2026年&#xff0c;无数高校学子正陷入一场无声的困境&#xff1a; 你没用AI&#xff0c;却因逻辑清晰被标记&#xf…...