【计算机组成原理】定点数的运算

2023-12-23 22:10

本文主要是介绍【计算机组成原理】定点数的运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数值运算的核心是指加、减、乘、除四则算术。由于计算机中的数有定点和浮点两种表示形式,因此相应有定点数的运算和浮点数的运算。本文将介绍计算机中定点数的加减法运算过程。

注意,理解本文的前提是要清楚知道顶点数的源码、反码和补码的含义,以及定点数在计算机中的表示形式。

1.补码加法

由于计算机中定点数均以补码的方式表示和存储(个人观点,有待证明),采用补码表示法进行加减运算比源码方便多了,因为不论是正还是负,机器总是做加法,减法运算可变成加法运算。

这里再次说明定点定点数(定点整数和定点小数)的源码、反码和补码的表示规则:
正数的符号位为0,反码和补码等同于源码。
负数符号位都固定为1,源码,反码和补码的表示都不相同,由原码表示法变成反码和补码有如下规则:
(1)源码符号位为1不变,整数的每一位二进制数位求反得反码;
(2)反码符号位为1不变,反码数值位最低位加1得补码。

1.1补码加法公式

补码加法公式是:

[x]补+[y]补=[x+y]补(mod2n)

这里说一下上面公式的意思。

mod2n

表示的是模运算,

2n

为模,这个模表示被丢掉的值。上面的式子在数学上成为为同余式,即等式两边的值取

2n

的余数是相等的。

以钟表为例,说明模运算。一个钟表有12个小时刻度,时间确实0-24小时。假设现在的标准时间是4点整,而有一个表已经7点了,为了校准时间,可以采用两种方法:一是将时针退7-4=3格;二是将时针向前拨12-3=9格。这两种方法都能对准到4点。由此可见,7-3和7+9是等价的。等价的条件就是以模为12的模运算的情况下等价,即除以12取余。以数学公式表示如下:

7−3=7+9(mod12)

1.2补码加法公式证明

可分五种情况来证明。假设采用定点整数表示。不包括溢出情况,该情况会另行讨论。

(1)x>0, y>0, 则x+y>0
由补码定义,[x]补=x,[y]补=y, 所以[x]补+[y]补=x+y=[x+y]补

(2)x<0, y<0, 则(x+y)<0

[x]补+[y]补=2n+x+2n+y=2n+(2n+x+y)=[x+y]补

(3)x>0, y<0, 则(x+y)<0或(x+y)>0
相加的两数一个为正,一个为负,因此相加结果有正、负两种可能。根据补码定义:[x]补=x,[y]补=2n+y,那么

[x]补+[y]补=x+2n+y=2n+(x+y)=[x+y]补

(4)x<0, y>0, 则(x+y)<0或(x+y)>0
这种情况和第三种情况一样,将x和y对调即可,不再赘述。

(5)当x=0或者y=0,或者x=y=0时
满足[x]补+[y]补=[x+y]补(mod2n)。

因此在模2n的意义下,任意两数的补码之和等于该两数之和的补码。这是补码加法的理论基础。

2.补码减法

负数的加法要利用补码化为加法来做,减法运算当然也要设法化为加法来做。其所以使用这种方法而不适用直接减法,是因为它可以和常规的加法运算使用同一加法器电路,从而简化了计算机的设计。

定点数用补码表示时,减法运算的公式为:

[x]补−[y]补=[x]补+[−y]补

为了证明这个公式,只要证明[−y]补=−[y]补,上式即得证。

证明如下:
因为[x]补+[y]补=[x+y]补,所以
①[y]补=[x+y]补–[x]补

又[x–y]补=[x+(–y)]补=[x]补+[–y]补,所以
②[–y]补=[x–y]补–[x]补

①+②得[–y]补+[y]补=[x–y]补–[x]补+[x+y]补–[x]补=[x–y]补+[x+y]补–[x]补–[x]补=[x–y+x+y]补–[x]补–[x]补=[2x]补–2[x]补=0

从而有 [–y]补=–[y]补(mod2n)

因此,只要求得[–y]补,就可以变减法为加法,已知[y]补,求[–y]补的法则是:

对[y]补各位(包括符号位)取反,然后在末位加上1,就可以得到[–y]补。

示例:
[X]补=00110110,[Y]补=11001101,求[X]补+[Y]补,[X]补−[Y]补 ,其中x=54,y=-51。
这里写图片描述

3.溢出概念与检测方法

3.1溢出的概念

在定点整数机器中,数的表示范围|x|<(2n−1)。在运算过程中如出现大于字长绝对值的现象,称为“溢出”。在定点机器中,正常情况下溢出是不允许的。

例:设定点整数字长8位,补码表示(最高位为符号位),表示范围为-128~127,运算结果超出此范围就发生溢出。

两个负数相加的结果小于机器所能表示的最小负数,结果变为负数,成为负溢

两个正数相加,结果大于机器字长所能表示的最大正数,结果成为变为负数,称为正溢

下面以具体的例子来演示正常的运算和溢出时的运算。
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

3.2溢出的检测方法

为了判断溢出是否发生可采用以下两种检测方法。

(1)单符号法
当两个操作数同号时,而其和的符号与操作数的符号不一致则就发出溢出,公式表示如下:

溢出=A⎯⎯⎯nB⎯⎯⎯nSn+AnBnS⎯⎯n

注意:
a、若是同号相减或异号相加,则运算结果不可能溢出;
b、若是同号相加或异号相减,则运算结果可能溢出。

(2)采用最高有效位的进位判断

溢出=C⎯⎯⎯nCn−1+CnC⎯⎯⎯n−1=C⎯⎯⎯n⨁C⎯⎯⎯n−1

符号位产生的进位与最高有效位产生的进位情况不同,则溢出。

(3)采用变形补码判断(双符号位)
用Sn+1、Sn分别表示结果最高符号位和第2个符号位。

溢出=Sn+1⨁Sn

01:结果正溢;

10:结果负溢;

定点整数的加减运算完成之后,会由硬件逻辑电路进行溢出检测,如果发现存在溢出,则产生硬件中断 。

4.定点小数的加减运算法则

定点小数是定点数的一种,其运算法则和步骤与定点整数一致,不再赘述。下面举个仅以双符号位补码来表示定点小数的补码加减运算示例。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述


参考文献

[1]计算机组成原理第四版[M].白中英.科学出版社
[2]http://wenku.baidu.com/link?url=BL5mztNkNIvtPKAF96-iHRPIUQLimljQ9bci9Vy5yGyjhfMe8F_wjxTYHgGG3MbgdMsEU-18oG27u5Tw4Q_ffmRqSg9imaPzif-0Vs3f8g3

原文链接:http://blog.csdn.net/k346k346/article/details/50530004

这篇关于【计算机组成原理】定点数的运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/529647

相关文章

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、