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

news/2023/12/9 19:36:10 标签: 算法, 数字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.niftyadmin.cn/n/5201161.html

相关文章

梯度引导的分子生成扩散模型- 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模型…

JS--localStorage设置过期时间的方案(有示例)

原文网址:JS--localStorage设置过期时间的方案(有示例)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍如何使用localStorage设置数据的过期时间。 问题描述 localStorage是不支持设置过期时间的,cookie虽然支持设置过期时间但它存的数据量很小。所…

11月21日,每日信息差

今天是2023年11月21日,以下是为您准备的16条信息差 第一、国内首条PPP模式市域铁路台州S1线客运量破900万人次。PPP(Public-Private Partnership)是公共基础设施的一种项目运作模式,指社会资本与政府合作,参与公共基础…

对象中扩展运算符的作用

1.对象的合并 let o1 {name: "张三",age: 18,brother: {name: "李四",age: 19,},};//属性不重复let o2 {hobby: "打篮球",};console.log({ ...o1, ...o2 });//属性重复,后面对象的属性会覆盖前面的属性let o3 {name: "王五&q…

Python下使用requests库遇到的问题及解决方案

每一盏灯都有一个故事……当凌晨2点我的房间灯还亮着时,那就是我与BUG的一场生死博弈。一个人静静地坐在电脑前不断地写代码,感觉快要麻木了,好比闭关修炼一样枯燥无味。最终当我打通任督二脉后,bug修复迎来的一片曙光。 一、问题…

LLM之Prompt(二):清华提出Prompt 对齐优化技术BPO

论文题目:《Black-Box Prompt Optimization: Aligning Large Language Models without Model Training》 论文链接:https://arxiv.org/abs/2311.04155 github地址:https://github.com/thu-coai/BPO BPO背景介绍 最近,大型语言模…

基于JPBC的无证书聚合签名方案实现

基于JPBC的无证书聚合签名方案实现 摘要 一开始签名方案是基于PKI的,无证书签名起源于 基于身份密码体制, 2009 年第一篇无证书签名方案1被提出,随后出现了一些列方案2,3;包括无配对的无证书聚合签名方案4,更多内容参考文献5. 暂时没有看见…

模电 01

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

2023年【上海市安全员C3证】考试内容及上海市安全员C3证复审考试

题库来源:安全生产模拟考试一点通公众号小程序 上海市安全员C3证考试内容是安全生产模拟考试一点通总题库中生成的一套上海市安全员C3证复审考试,安全生产模拟考试一点通上上海市安全员C3证作业手机同步练习。2023年【上海市安全员C3证】考试内容及上海…

XmlElement注解在Java的数组属性上,以产生多个相同的XML元素

例如&#xff0c;下面这段XML数据&#xff0c;有多个data元素&#xff0c;并且它们级别相同: <?xml version"1.0" encoding"UTF-8"?><request><reqtype>05</reqtype><secret>test</secret><body><userid&…

基于Vue+SpringBoot的考研专业课程管理系统

项目编号&#xff1a; S 035 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S035&#xff0c;文末获取源码。} 项目编号&#xff1a;S035&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高…

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

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

图像分类(四) 全面解读复现GoogleNet_InceptionV1-V4

论文解读 InceptionV1 前言 论文题目: Going Deeper with Convolutions Googlenet论文原文地址:https://arxiv.org/pdf/1409.4842.pdf 之前看过VGG的论文&#xff08;VGG精读直达&#xff09;。当时VGG获得了 2014 ILSVRC 图像分类的第二名&#xff0c;今天来看一下第一名…

[Linux] shell条件语句和if语句

一、条件语句 1.1 测试 test 测试文件的表达式是否成立 格式&#xff1a;test 条件表达式 [ 条件表达式 ] 选项作用-d测试是否为目录-e测试目录或文件是否存在-a测试目录或文件是否存在-f测试是否为文件-r测试当前用户是否有权限读取-w测试当前用户是否有权限写入-x测试当前…

【Android】Hilt比Android好在哪里

Hilt框架的功能和设计理念&#xff0c;和Dagger基本是完全一致的&#xff0c;Hilt也是完全在Dagger基础上进行开发的 但是Dagger的用法比较繁琐&#xff0c;Hilt主要是做了便用性上的改进&#xff0c;主要有以下点 提供常用Component&#xff0c;不用再为每个InjectTarget都创…

CMap数据库筛选化学药物

数据库clue.io 文献链接&#xff1a;连接图谱&#xff1a;使用基因表达特征连接小分子、基因和疾病 |科学 (science.org) 基本模式&#xff1a;利用CMap将差异基因列表与数据库参考数据集比对&#xff1b;根据差异表达基因在参考基因表达谱富集情况得到一个相关性分数&#…
最新文章