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

news2024/9/30 15:21:37

相关阅读

数字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.coloradmin.cn/o/1235010.html

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

相关文章

线程池有几种创建方式?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

开源的进销存系统都有哪些?

开源的进销存系统有很多,以下是其中一些比较流行的: OpenERP:一个集成了多个业务功能的开源ERP软件,可以实现进销存管理,会计,仓库管理,销售管理等业务功能。 Odoo:是OpenERP的一个分支&#x…

【C语言】数据结构——栈和队列实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:一、 栈1. 栈的概念及结构2. 栈的实现3. 实现代码3.1 定义结构体3.2 初始化栈3.3 销毁栈3.4 入栈3.5 出栈…

2023年G3锅炉水处理证考试题库及G3锅炉水处理试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年G3锅炉水处理证考试题库及G3锅炉水处理试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机…

【数据结构】栈和队列的模拟实现

前言:前面我们学习了单链表并且模拟了它的实现,今天我们来进一步学习,来学习栈和队列吧!一起加油各位,后面的路只会越来越难走需要我们一步一个脚印! 💖 博主CSDN主页:卫卫卫的个人主页 &#x…

提升--09-1--AQS底层逻辑实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、怎么解释AQS是什么?AQS的本质是JUC包下一个抽象类,AbstractQueuedSynchronizer (抽象的队列式同步器) 二、AQS核…

基于霍克斯过程的限价订单簿模型下的深度强化学习做市策略

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

【secureCRT连接Virtual Box里安装的Utuntu】

先说一下为什么要写这篇文章及一些背景问题介绍,楼主第一次使用secureCRT及securtFX这两个软件,在windows系统下访问虚拟机里面的ubuntu系统。看了网上的不少帖子,没有让我清晰明白地知道怎么使用secureCRT。连接不通,不知道是虚拟…

【Python】给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。 输入格式 第一行包含一个整数n。 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。 第三行包含一个整数a,为待查找的数。 输出格式…

LangChain的函数,工具和代理(一):OpenAI的函数调用

一、什么是函数调用功能 几个月前OpenAI官方发布了其API的函数调用功能(Function calling), 在 API 调用中,您可以描述函数,并让模型智能地选择输出包含调用一个或多个函数的参数的 JSON 对象。API函数“ChatCompletion” 虽然不会实际调用该函数&#…

redis之数据类型

(一)关系型数据库和非关系型数据库的区别 1、关系型数据库是一个机构化的数据库,列和行 (1)列:声明对象 (2)行:记录对象的属性 (3)表与表之间…

Python (十三) 输出

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

使用pytorch利用神经网络原理进行图片的训练(持续学习中....)

1.做这件事的目的 语言只是工具,使用python训练图片数据,最终会得到.pth的训练文件,java有使用这个文件进行图片识别的工具,顺便整合,我觉得Neo4J正确率太低了,草莓都能识别成为苹果,而且速度慢,不能持续识别视频帧 2.什么是神经网络?(其实就是数学的排列组合最终得到统计结果…

Vue项目 配置项设置

一、项目运行时浏览器自动打开 找到package.json文件 找到"sctipts"配置项 在"serve"配置项最后加上--open "scripts": {"serve": "vue-cli-service serve --open","build": "vue-cli-service build&quo…

2023年【四川省安全员A证】复审考试及四川省安全员A证考试试题

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员A证复审考试根据新四川省安全员A证考试大纲要求,安全生产模拟考试一点通将四川省安全员A证模拟考试试题进行汇编,组成一套四川省安全员A证全真模拟考试试题,学员可通过…

Nacos介绍与使用

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

2023/11/21JAVAweb学习

优先级高低id > 类 > 元素 格式化ctrl alt L

LeetCode热题100——动态规划

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

GAMES101—Lec 05~06:光栅化

目录 概念回顾(个人理解)光栅化1.采样2.采样出现的问题:走样 反走样 概念回顾(个人理解) 屏幕:在图形学中,我们认为屏幕是一个二维数组,数组里的每一个元素为一个二维像素。 光栅化…