数字IC基础:有符号数和无符号数的加减运算

相关阅读

数字IC基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12365795.html?spm=1001.2014.3001.5482 


        首先说明,本篇文章并不涉及补码运算正确性的证明,仅是对补码运算在有符号数和无符号数中运行进行讨论。

        补码运算最大的作用在于消除计算机内部的减法器,所以实际上一个计算机中只有加法器而并不存在减法器,所有的减法操作(有符号数减法、无符号数减法)都是使用加法器完成的。

        下面是补码运算的公式,其中x和y可以理解为一般意义上的十进制数,比如x为2,y为-1,则按照补码运算公式得到的是1的补码;x为1,y为-5,则按照补码运算公式得到的是-4的补码。注意这里得到十进制数的补码需要先将其转换为二进制原码,然后再转换为二进制补码。

[x]_{complement}+[y]_{complement}=[x+y]_{complement}

        其中需要注意的是,两个补码相加必须保证这两个补码有相同的位数,当其中两个补码位数不同时,需要将位宽短的那个补码符号拓展至位宽长的那个补码才能相加。具体操作如下,当十进制数-1的4位二进制补码1111想和十进制数2的8位二进制补码00000010相加时,必须先将1111符号拓展至11111111才能与00000010相加,得到结果00000001,即十进制数1的8位二进制补码。

        两个二进制补码相加后的位宽不变,例如两个8位二进制补码相加结果仍然为8位二进制补码,这就导致了当两个正数或两个负数相加时,可能产生溢出,通俗理解就是结果不能再用8位二进制补码表示了(即需要用9位二进制补码表示)。比如对于4位二进制补码,可以表示的十进制数范围是-8到7,此时当两个十进制数4的4位二进制补码的相加时,结果本应该为十进制数8的4位二进制补码,但很遗憾4位二进制补码最高只能表示7,并不能表示8。溢出很好发现,当两个正数(二进制补码符号位为0)相加得到了负数(二进制补码符号位为1),或两个负数相加得到了正数,则可认为产生了溢出。

        使用上面的4+4的例子说明,4的4位二进制数补码为0100,0100+0100得到1000即-8的二进制补码,两个正数相加得到了负数,这是不可能的,这就是溢出。如何解决这个问题呢?如果使用4的5位二进制补码相加就不会产生问题,因为5位二进制补码可以表示的十进制数范围是-16到15。具体过程为00100+00100得到01000即8的二进制补码。在计算机中,使用了OF这个标志来表示在当前的数据和当前选择的补码位宽的情况下是否会产生溢出,它的产生可以使用多种判定条件。

        1、当Sa=Sb且Ss!=Sa,即两个加数符号相同,且结果与两个加数符号不同,OF置1。

        2、当符号位相加的进位不等于最高有效位相加的进位时,OF置1,这也很好理解,当最高有效位有进位时,如果符号位没有进位,表示符号位都为0,此时两个符号位为0的数相加得到了符号位为1的结果;当最高有效位没有进位,如果符号位有进位,表示符号位都为1,此时两个符号位为1的数相加得到了符号位为0的结果。

        上面已经讨论完了有符号数相加的情况,当有符号数相减时,使用的其实依然是最初的补码运算公式,但此时进行了一些变形。

[x]_{complement}+[-y]_{complement}=[x-y]_{complement}

        在这个步骤中,只要把y换成y相反数的补码即可,通过一个数的补码可以很容易地得到其相反数的补码,将其所有二进制位取反加一即可(包括符号位),例如对于十进制数5的4位二进制补码0101,十进制数-5的二进制数补码即为1011。这样就将所有的减法转换为了加法,这正是补码运算的强大之处。

        下面我们来谈一下无符号数的加减法,无符号数不包括符号位,但依然可以按照补码的方式加减,我们只需要给他添上一位符号位0表示其为正数即可,即对于十进制数8的4位无符号二进制数1000,在运算时可以将其看做5位二进制补码01000(其中首位0为符号位)。此时两个无符号数的加法可以看做两个有符号正数相加,若结果的符号位为则1代表有进位,就像有符号数相加产生溢出一样,进位用CF表示,但这里只会出现正数相加溢出。当两个无符号数相减时,就把减数按照有符号数相减中方式一样变成其相反数的补码然后相加,此时若结果的符号位为0(最高有效位有进位),则表示没有借位,若符号位为1(最高有效位无进位)则表示有借位(即相减结果为负),借位也用CF表示,就像是两个有符号正数相减一样。比如若相减结果为10111,可以看做结果是7并有借位,也可以看做相减结果为-9。

        从上面的讨论中我们得到了一个结论:在计算机中无论是有符号数加减还是无符号数加减都是用补码加法实现的。

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

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

相关文章

机器学习8:在病马数据集上进行算法比较(ROC曲线与AUC)

ROC曲线与AUC。使用不同的迭代次数(基模型数量)进行 Adaboost 模型训练,并记录每个模型的真阳性率和假阳性率,并绘制每个模型对应的 ROC 曲线,比较模型性能,输出 AUC 值最高的模型的迭代次数和 ROC 曲线。 …

5 个适用于 Linux 的开源日志监控和管理工具

当Linux等操作系统运行时,会发生许多事件和在后台运行的进程,以实现系统资源的高效可靠的使用。这些事件可能发生在系统软件中,例如 init 或 systemd 进程或用户应用程序,例如 Apache、MySQL、FTP 等。 为了了解系统和不同应用程序…

UE5和UE4版本更新重大改变汇总。

转载:UE5和UE4版本更新重大改变汇总。 - 知乎 (zhihu.com) 用户界面变化: 1,原先拖动给放置Actor的place actors,世界大纲,Level等都可以通过右击隐藏到侧边栏; 2,Command命令窗口和ContentBr…

优秀智慧园区案例 - 佛山美的工业城零碳智慧园区,先进智慧园区建设方案经验

一、项目背景 美的工业园区西区最早建于上世纪90年代,到现在已经过去近30年,而这三十年恰恰是信息科技大发展的30年,原有的生产办公条件已不能很好的承载新时期办公和参观接待的需求。所以在21年美的楼宇科技事业部决定对原来的园区进行改造…

文本转语音

免费工具 音视频转译 通义听悟 | https://tingwu.aliyun.com/u/wg57n33kml5nkr3p 音色迁移 speechify | https://speechify.com/voice-cloning/ 视频生成 lalamu | http://lalamu.studio/demo/ 画质增强 topazlabs video AI | https://www.topazlabs.com 付费工具 rask | htt…

LeetCode热题100——动态规划

动态规划 1. 爬楼梯2. 杨辉三角3. 打家劫舍 1. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? // 题解:每次都有两种选择,1或者2 int climbStairs(int n) {if (n …

STM32CubeMX学习笔记-CAN接口使用

STM32CubeMX学习笔记-CAN接口使用 CAN总线传输协议1.CAN 总线传输特点2.位时序和波特率3.帧的种类4.标准格式数据帧和遥控帧从STM32F407参考手册中可以看出主要特性如下CAN模块基本控制函数CAN模块消息发送CAN模块消息接收标识符筛选发送中断的事件源和回调函数 CubeMX项目设置…

matlab设置背景颜色

matlab默认的背景颜色是纯白RGB(255,255,255),纯白太刺眼,看久了,眼睛会酸胀、疼痛,将其改成豆沙绿RGB(205,123,90),或者给出浅绿色RGB(128,255,255), 颜色就会柔和很多,眼睛感觉更舒适。     下面介绍在…

java springboot 在测试类中声明临时Bean对象

上文 java springboot在当前测试类中添加临时属性 不影响application和其他范围 中 我们讲了怎么在测试类中设置临时属性 但是 如果我们想设置临时的Bean呢? 其实做过几个项目的人都会理解 我们很多功能 需要一些第三方bean才能完成 那么 我们可能存在需要用第三方b…

Java实现windows系统截图

Java提供了一种方便的方式来截取Windows系统的截图。这个过程通常需要使用Java的Robot类来模拟用户的鼠标和键盘输入操作。下面将介绍如何使用Java实现Windows系统截图。 步骤1:导入Robot和AWT包 Java提供了一个Robot类,它可以模拟用户的键盘和鼠标操作…

2015-2020年全国地区生产总值及一二三产构成数据总览,shp/excel格式

今天我们来整理了2015-2020全国地区生产总值及一二三产构成数据,数据格式为shpexcel格式,数据精度可达各区县。 另外,需要说明的是:由于统计年鉴指标调整,每一年的数据并非字段相同,字段详情请参考已下载数…

梯度引导的分子生成扩散模型- GaUDI 评测

GaUDI模型来自于以色列理工Tomer Weiss的2023年发表在预印本ChemRxiv上的工作 《Guided Diffusion for Inverse Molecular Design》。原文链接:Guided Diffusion for Inverse Molecular Design | Materials Chemistry | ChemRxiv | Cambridge Open Engage GaUDI模型…

详解Python Tornado框架写一个Web应用全过程

Tornado是什么 之前在看Jupyter组件的源码的时候,发现了tornado这个web框架。 不仅仅做一个web框架, 通过使用非阻塞网络I/O,Tornado可以扩展到数万个开放连接。 这样非常适合 long polling , WebSockets 以及其他需要与每个用户…

shell脚本判断语句

目录 一. 判断语句 1. 判断文件是否存在 test 2. 数值比较 3. 字符串比较 4. 逻辑运算 5. [ ] 与 [ [ ] ] 6. ( ) 与 { } 7. if 语句 二. 脚本应用 一. 判断语句 1. 判断文件是否存在 test 选项 -a 和 -e 都可以判断文件是否存在 只是 -a 选项在取反时有问题&#xf…

Linux | 安装openGauss数据库

Linux 安装openGauss数据库 今天我们来安装一下国产数据库openGauss~~ 下载openGauss 首先在官网下载对应的安装包,我们这里下载LInux 极简版来演示安装 下载后,使用root用户上传到Linux ,这边上传到/usr/local/目录下, 使用root 用户创建安装目录 mkdir /usr/l…

C++刷题 -- 二分查找

C刷题 – 二分查找 文章目录 C刷题 -- 二分查找一、原理二、例题1.二分查找2.使用二分查找确定target左右边界3.x的平方根 一、原理 条件:数组为有序数组,数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能…

基于单片机预费电表控制系统(proteus仿真+源程序)

一、系统方案 1、本设计采用这51单片机作为主控器。 2、采集电量值送到液晶1602显示。 3、按键设置预设值,实际使用电量超过设置,蜂鸣器报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void LCD_init(void) { …

SMART PLC累计流量功能块(梯形积分法+浮点数累加精度控制)

S7-200SMART PLC数值积分器相关知识请参考下面文章链接: SMART PLC数值积分器功能块(矩形+梯形积分法完整源代码)-CSDN博客文章浏览阅读153次。PLC的数值积分器算法也可以参考下面文章链接:PLC算法系列之数值积分器(Integrator)-CSDN博客数值积分和微分在工程上的重要意义不…

前端CSS实现响应式TimeLine效果(附源码)

文章目录 纯CSS搭建,先上效果图(附有源码)视图层 index.htmlindex.css 公用样式文件Main.css 主要的样式文件 纯CSS搭建,先上效果图(附有源码) 本效果为纯CSS搭建,适配移动端和PC端&#xff01…