定点加减运算(补码加减法及溢出检测)
本文只针对定点的加减运算(补码加减法实现),不涉及定点数的乘除运算以及浮点数运算
补码加减法
- 公式
- 补码加法: [x+y]补=[x]补+[y]补 [ x + y ] 补 = [ x ] 补 + [ y ] 补 [x+y]_补=[x]_补+[y]_补
- 补码减法: [x−y]补=[x]补+[−y]补 [ x − y ] 补 = [ x ] 补 + [ − y ] 补 [x-y]_补=[x]_补+[-y]_补
注意: [−y]补=[y]补 [ − y ] 补 = [ y ] 补 [-y]_补= [y]_补包括符号位取反且最末位加1,这里的取反是包括符号位的,与求反码的不同
- 例子
- 例1: x=-0.1011,y=0.0111,求 [x+y]补 [ x + y ] 补 [x+y]_补
[x]补=1.0101 [ x ] 补 = 1.0101 [x]_补=1.0101
[y]补=0.0111 [ y ] 补 = 0.0111 [y]_补=0.0111
[x+y]补=[x]补+[y]补=1.0101+0.0111=1.1100 [ x + y ] 补 = [ x ] 补 + [ y ] 补 = 1.0101 + 0.0111 = 1.1100 [x+y]_补=[x]_补+[y]_补=1.0101+0.0111=1.1100 - 例 2: x=+0.11011,y=-0.11111,求 [x−y]补 [ x − y ] 补 [x-y]_补
[x]补=0.11011 [ x ] 补 = 0.11011 [x]_补=0.11011
[y]补=1.00001 [ y ] 补 = 1.00001 [y]_补=1.00001
[−y]补=0.11111 [ − y ] 补 = 0.11111 [-y]_补=0.11111
[x−y]补=[x]补+[−y]补=1.11010 [ x − y ] 补 = [ x ] 补 + [ − y ] 补 = 1.11010 [x-y]_补=[x]_补+[-y]_补=1.11010
- 例1: x=-0.1011,y=0.0111,求 [x+y]补 [ x + y ] 补 [x+y]_补
溢出检测
- 概念:
在定点整数机器中,数的表示范围为 |x|<(2n−1) | x | < ( 2 n − 1 ) |x|,若运算的过程中出现大于此字长绝对值的现象,则称之为”溢出”
但n位二进制补码数的表示范围是 −2n−1 − 2 n − 1 -2^{n-1}到 2n−1−1 2 n − 1 − 1 2^{n-1}-1,详见https://blog.csdn.net/alinyua/article/details/79702879 - 可能出现溢出的情况:
- 两正数加,变负数,上溢(正溢)(大于机器所能表示的最大数)
- 两负数加,变正数,下溢(负溢)(小于机器所能表示的最小数)
检测方法
双符号位法
1.参与加减运算的数采用变形补码表示(正数的两个符号位是”00”,负数的两个符号位是”11”,尾数规则同补码)
2.连同符号位参与运算
3.根据两个符号位判断结果是否溢出(机器中用异或门判断)符号位SF1 符号位SF2 结果 0 0 正确(正数) 0 1 上溢 1 0 下溢 1 1 正确(负数) 例子:x=-1100,y=-1000,求x+y
[x]补=110100 [ x ] 补 = 110100 [x]_补=110100
[y]补=111000 [ y ] 补 = 111000 [y]_补=111000
[x]补+[y]补=101100 [ x ] 补 + [ y ] 补 = 101100 [x]_补+[y]_补=101100
由于两个符号位出现”10”,表示下溢单符号位法
- 连同符号位参与运算
- 分别求符号位产生的进位 Cf C f C_f和最高有效位产生的进位 C0 C 0 C_0
- 根据 Cf C f C_f和 C0 C 0 C_0判断结果是否溢出(机器中用异或门判断)
符号位进位 Cf C f C_f 最高位进位 C0 C 0 C_0 结果 0 0 正确(正数) 0 1 上溢 1 0 下溢 1 1 正确(负数
关于原码,反码,移码的概念和计算参考https://blog.csdn.net/alinyua/article/details/79702879
定点加减运算(补码加减法及溢出检测)相关推荐
- 考前自学系列·计算机组成原理·补码定点加减运算和溢出判断,浮点数的加减运算,原码的乘法
补码定点加减运算和溢出判断 浮点数的加减运算 原码乘法
- 计组之数据运算:5、加减运算与溢出判断
5.加减运算与溢出判断 思维导图 原码的加减运算 补码的加减运算 溢出判断 1.采用一位符号位直接判断 2.采用一位符号位用进位判断 3.采用双符号位判断 符号扩展 思维导图 原码的加减运算 补码的加 ...
- 浮点加减运算中关于结果规格化的思考
对于两个浮点数x和y满足: 完成x与y的加减法有四个步骤: 0操作数检查.即检查是否有一个操作数为0,是的话直接得到结果,一般在计算机中不进行这一步. 比较阶码大小并完成对阶.要让两个浮点数的尾数能够 ...
- 浮点数加减运算左规右规
当尾数用二进制表示时,浮点规格化的定义是尾数M应满足: 1/2 ≤ |M|<1 显然对于正数而言,有M = 00.1φφ-φ:对于负数,其补码形式为11.0φφ-φ(即-0.0***** ...
- 原码/补码的加减运算and溢出判断
小数点的处理: 任意一个二进制数S都可以表示为 研究小数点就要研究阶码E的取值: 若E=0,则表示纯小数--代表定点小数: 例0.1111表示+0.1111,1.1111表示-0.1111. 若E=n ...
- 补码加减运算及判断溢出方法
一.补码加减运算 二.判断溢出方法 1.符号位判溢出方法 对于加减运算,两个异号数相加或者两个同号数相减,结果的绝对值一定比任何一个数的绝对值要小,不会发生上溢出.两个异号数相减或者两个同号数相加的绝 ...
- 补码的加减运算和溢出判断
补码的加减运算 定义:两个操作数用补码表示,连同符号位一起表示,结果也用补码表示 补码的加减运算公式:(X+Y)补 = X补 + Y补 (X-Y)补 = X补 + (- ...
- 使用全加器实现补码的加减运算
引言: 我们都知道,在计算机中的加减运算都是由补码来实现的,那么,计算机是如何运用电路来实现补码的加减的呢?在计算机中,所有的加减运算其实都变成了加法后来参与运算的,那么仅需要一个加法器就可以实现了. ...
- 微型计算机原理计算两数和,微型计算机原理及汇编语言 第2章-2 补码及加减运算.ppt...
微型计算机原理及汇编语言 第2章-2 补码及加减运算 2.4 数的定点与浮点表示法 2.4.1 定点表示 所谓定点表示法,是指小数点在数中的位置是固定的.原理上讲,小数点的位置固定在哪一位都是可以的, ...
最新文章
- Open3d学习计划—高级篇 7(颜色映射)
- C 语言编程 — uint8_t / uint16_t / uint32_t /uint64_t
- Ubuntu 16.04下Caffe-SSD的应用(四)——ssd_pascal.py源码解读
- UNIX再学习 -- 信号
- [翻译] C# 3.0语言规范 收藏
- KVM虚拟机相关步骤
- C和指针之动态内存分配堆、栈、全局区(静态区)、常量区对比总结学习笔记
- c语言around用法,KET基础语法:介词among和around的用法及例句
- linux gcc延时怎么写,Clang / GCC是否真的支持延迟加载功能?
- 报告漏洞后 马斯克宣布撤回FSD Beta 10.3版本
- C/C++代码调试:快速定位内存的申请和释放的位置
- android之uniapp调用weex的module
- springboot做网站_Github点赞接近100k的SpringBoot学习教程+实战推荐!牛批!
- 持久化/Session和SessionFactory线程非安全和安全/Hibernate的优势
- 格雷码Gray Code详解
- 批量归一化Batch Normalization 动手学深度学习v2
- 房友手机服务器安装文件,房友软件服务器地址
- 使用iptables+脚本实现只允许中国IP访问服务器
- 极坐标梯度公式_一般坐标系下的梯度散度旋度及拉普拉斯形式
- Python3实现基于百度AI开放平台和图灵机器人API聊天机器人