数字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。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ 基础操作

概念 从计算机术语层面来说,RabbitMQ 模型更像是一种交换机模型。 Queue 队列 Queue:队列,是RabbitMQ 的内部对象,用于存储消息。 RabbitMQ 中消息只能存储在队列中,这一点和Kafka相反。Kafka将消息存储在topic&am…

2023年【T电梯修理】考试题及T电梯修理考试报名

题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理考试题是安全生产模拟考试一点通总题库中生成的一套T电梯修理考试报名,安全生产模拟考试一点通上T电梯修理作业手机同步练习。2023年【T电梯修理】考试题及T电梯修理考试报名 1、【多选题】GB/T1…

什么是PyQt?

什么是Qt? Qt是一个著名的跨平台C图形用户界面应用程序开发框架。它由Qt公司开发,于1995年首次发布。Qt支持各种桌面,嵌入式和移动平台。 Qt的特点包括: 跨平台支持:Qt应用程序可以编译到多种平台运行,包括Windows,Mac,Linux,Android,iOS等。这大大简化了跨平台应用程序的开…

2023年亚太杯数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 最短时…

超级实用的程序员接单平台,看完少走几年弯路,强推第一个!

”前途光明我看不见,道路曲折我走不完。“ 兜兜转转,心心念念,念念不忘,必有回响。终于找到了....... 网络上好多人都在推荐程序员线上接单,有人说赚得盆满钵满,有的人被坑得破口大骂,还有的人…

解决Zotero不显示标签的问题

目录 问题描述 解决办法: 问题描述 Zotero是一款学习助手,可以帮助我们梳理文献,方便我们整理。 最近电脑从windows换到mac,重新安装了Zotero,发现之前的一直设置都没有了。比如设置好的标签信息不显示了。如下图: …

matlab设置背景颜色

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

Java使用x-www-form-urlencoded发请求

平常在开发过程中用的最多的就是JSON格式&#xff0c;请求编码就是 application/json&#xff0c;但偏偏有些接口是 x-www-form-urlencoded&#xff0c;怎么办呢&#xff0c;重新封装喽 在POSTMan工具是叫 x-www-form-urlencoded 在 APIpost工具中是叫 urlencoded Map<Str…

2023年【施工升降机司机(建筑特殊工种)】最新解析及施工升降机司机(建筑特殊工种)考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 施工升降机司机(建筑特殊工种)最新解析参考答案及施工升降机司机(建筑特殊工种)考试试题解析是安全生产模拟考试一点通题库老师及施工升降机司机(建筑特殊工种)操作证已考过的学员汇总&#xff0c;相对有效帮助施工升…

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

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

C语言进阶之冒泡排序

✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 前情回顾 1、回调函数 2、冒泡排序 3、库函数qsort cmp&#xff08;sqort中的比较函数&#xff0c;需要我们自定义&#xff09; …

c++|内联函数

一、概念 以inline修饰的函数叫做内联函数&#xff0c;编译时c编译器会在调用函数的地方展开&#xff0c;而不会建立栈帧&#xff0c;提升了程序运行的效率 例子&#xff1a; #include <iostream> using namespace std;int Add(int left, int right) {return left - ri…

详解硬盘的接口、总线和协议

总线&#xff1a;总线是计算机系统中用于连接各个硬件组件的一种通信方式&#xff0c;它可以实现数据、地址和控制信号的传输。在服务器中&#xff0c;内部总线起着承载数据和控制信号的重要作用。总线在单位时间内能传输数据量称为带宽。分为SATA&#xff0c;SAS&#xff0c;P…

Deep Learning for Monocular Depth Estimation: A Review.基于深度学习的深度估计

传统的深度估计方法通常是使用双目相机&#xff0c;计算两个2D图像的视差&#xff0c;然后通过立体匹配和三角剖分得到深度图。然而&#xff0c;双目深度估计方法至少需要两个固定的摄像机&#xff0c;当场景的纹理较少或者没有纹理的时候&#xff0c;很难从图像中捕捉足够的特…

模电 01

一.半导体基本知识 1.优点&#xff1a;体积小、重量轻、使用寿命长、输入功率小、功率转换效率高。 2.性能介于导体与绝缘体 3.常用半导体材料&#xff1a;硅&#xff08;SI&#xff09; 镉&#xff08;Ge&#xff09;,化合物半导体&#xff1a;砷化镓&#xff08;GaAs&…

centos安装kingbase(人大进仓)数据库

一、kingbase官网 https://www.kingbase.com.cn/rjcxxz/index.htm二、官网获取安装镜像文件和licence 三、安装步骤 1、创建新用户kingbase及其同名分组,以及家目录,并设置密码 useradd -m -U kingbase passwd kingbase2、创建自定义安装路径 su root mkdir -p /opt/Kingba…

Nacos介绍与使用

Nacos介绍与使用 文章目录 Nacos介绍与使用一. 什么是Nacos1 Nacos功能1.1 配置中心1.2 注册中心 2.为什么要使用Nacos 二.Nacos 部署安装1. Nacos 部署方式2. Nacos 安装3. 配置数据源4. 开启控制台授权登录&#xff08;可选&#xff09; 三. Nacos配置中心的使用1. 创建配置信…

暴力求解欲哭无泪之保安问题

身为程序员哪一个瞬间让你最奔溃&#xff1f; > 提醒&#xff1a;在发布作品前&#xff0c;请把不需要的内容删掉。 方向一&#xff1a;身为程序员遇到过的奔溃瞬间 写题目想到第一个方法便是暴力求解,然后少情况 题目如下: 方向二&#xff1a;如何解决遇到的奔溃瞬间 不…

[Docker]八.Docker 容器跨主机通讯

一.跨主机通讯原理 在主机192.168.31.140上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16), 在主机192.168.31.81上的docker0(172.17.0.0/16)中有一个容器mycentos( 172.17.0.2/16),然后在主机192.168.31.140上ping主机192.168.31.81,发现ping不通要实现两个主…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大特点分析

数字化时代银行网点厅堂营销存在以下5大特点&#xff1a; 1、产品多样化&#xff1a;在数字化时代&#xff0c;银行的产品和服务变得更加多样化。除了传统的存款、贷款、理财等金融服务外&#xff0c;还新增了各种创新产品&#xff0c;如网上银行、移动支付、投资咨询、保险、…