PC_溢出概念+判断方法+示例

2023-05-16

文章目录

  • PC_溢出概念+判断方法+示例
    • ref
    • 分类
    • 定点计算机中的溢出
      • 定点机溢出示意图
    • 在浮点计算机中的溢出
      • 浮点机溢出示意图
  • 溢出简易判断规律
    • 溢出的必要条件
    • 定点数🎈补码运算判断溢出方法
      • 用一位符号位判断溢出
      • 双符号位:变形补码判断溢出
        • 硬件实际情况
      • 采用一位符号位并根据最高数据位进位情况判断

PC_溢出概念+判断方法+示例

  • 算术溢出(arithmetic overflow)是指计算机进行算术运算产生的结果超出机器所能表示的范围

ref

  • 计组_浮点数表示/定点数和浮点数比较/溢出_xuchaoxin1375的博客-CSDN博客_浮点数的补码怎么算

分类

  • 根据溢出方向:

    • 上溢

    • 下溢

    • 在浮点机中可以进一步分为:

      • 正上溢

      • 负上溢

      • 正下溢

      • 负下溢

      • 正下溢和负下溢是连在一起的区间(是0的去心邻域)

        • 浮点数可以表达0,但是可能表示不了不等于但是很接近0的数
  • 根据小数点类型:

    • 定点机定点数溢出
    • 浮点机浮点数溢出

定点计算机中的溢出

  • 从正方向超过了数的表示范围,称为上溢;
  • 从负方向超过了数的表示范围,则称为下溢。

定点机溢出示意图

  • 定点数小数的溢出示意
    • 可见,定点小数只可以表示纯小数
      • 否则会上溢

在这里插入图片描述

  • 定点整数溢出:
    • 定点整数只能够表示纯整数,否则会出现下溢

在浮点计算机中的溢出

  • 浮点数的表示范围主要由阶码来决定。(尾数决定的是精度)

  • 不论数的符号是正还是负,若阶码从正的方向超出了阶码的表示范围,称为上溢;

  • 若阶码从负的方向超出阶码的表示范围,或者尾数为“0”时,统称为下溢。

浮点机溢出示意图

在这里插入图片描述

  • 一般来说,计算机对于浮点数的下溢,则自动当作“0”来处理,不输出错误信息(精度的溢出);

  • 而产生的上溢(范围溢出),计算机则产生==“溢出中断”==,并输出溢出的错误信息,甚至停止程序的运行

溢出简易判断规律

  • 定点数加减运算结果出现溢出时,得到的是错误的结果

溢出的必要条件

  • 仅当两个符号相同的数相加或两个符号相异的数相减才可能产生溢出
    • 上面两种情况才有可能引发进位

      • (换句话说,如果两个参与计算的数(本身没有溢出)且计算过程没有进位,则该计算也不可能发生溢出)

        • 进位是溢出的必要条件
      • 但是如果只知道发生了进位,不可以断定发生溢出

        • 设机器数 S = x 0 , x 1 x 2 ⋯ x n S=x_0,x_1x_2\cdots{x_n} S=x0,x1x2xn

        • 更有具体的是,最高位数值位 x 1 x_1 x1处发生进位(以原码为例)

    • 口诀:同号加,异号减,进位是发生溢出的必要条件

      • 比如:两个正数相加,结果的符号位却为 1 (结果为负);

      • 一个负数减去某个正数,结果的符号位却为 0 (结果为正)

定点数🎈补码运算判断溢出方法

  • 方法使用对象:定点数补码
    • 定点数补码的加减运算溢出判断的方法有 3 种:

用一位符号位判断溢出

  • 对于加法

    • 只有在正数加正数和负数加负数两种情况下才可能出现溢出,
    • 符号不同的两个数相加是不会溢出的。
  • 对于减法

    • 只有在正数减负数或负数减正数两种情况下才可能出现溢出,
    • 符号相同的两个数相减是不会溢出的。
  • 而减法运算在及其中是用加法器实现的,无论是加法还是减法:

    • 只要参与操作的2个数A,B的符号 A s , B s A_s,B_s As,Bs相同(AB>0)

    • 再将机器的计算结果记为S,S的符号位记为 S s S_s Ss

    • 溢出的条件就是:

      • A s , B s 的符号位 ( 相同且 ) 都与 S s 相反 A_s,B_s的符号位(相同且)都与S_s相反 As,Bs的符号位(相同且)都与Ss相反

        • 使用数字逻辑表达式进行描述:

          • A s B s S s A_sB_sS_s AsBsSs
            • 110
            • 001
          • 使用卡诺图等方法可以推导出相应的逻辑表达式
        • V = A s B s S s ‾ + A s ‾   B s ‾ S s 如果 V = 0 表示无溢出 否则溢出 V=A_sB_s\overline{S_s}+\overline{A_s}\ \overline{B_s}S_s \\如果V=0表示无溢出 \\否则溢出 V=AsBsSs+As BsSs如果V=0表示无溢出否则溢出

      • 从概率论的角度看,事件 V = {   发生溢出   } V=\set{发生溢出} V={发生溢出}的符号表示为:

        • V = A s B s S s ‾ ∪ A s ‾   B s ‾ S s V=A_sB_s\overline{S_s}\cup\overline{A_s}\ \overline{B_s}S_s V=AsBsSsAs BsSs
          • V 1 = A s B s S s ‾ V_1=A_sB_s\overline{S_s} V1=AsBsSs
          • V 2 = A s ‾   B s ‾ S s V_2=\overline{A_s}\ \overline{B_s}S_s V2=As BsSs
          • V = V 1 ∪ V 2 , V 1 与 V 2 至少一个事件发生 , 则表示溢出 V=V_1\cup{V_2},V_1与V_2至少一个事件发生,则表示溢出 V=V1V2,V1V2至少一个事件发生,则表示溢出

  • 下面以机器字长为4位(含1位符号位)为例,说明机器是如何判断溢出的。
  • 机器字长为4位的补码所对应的真值范围为-8~+7,运算结果一旦超过这个范围即为溢出。

    • 由于减法运算在机器中是用加法器实现的,因此可得出如下结论:不论是作加法还是减法,只要实际参加操作的两个数符号相同,结果又与原操作数的符号不同,即为溢出。
    • 1646372081727

1646372245414

上例化为十进制时,真值运算表示( − 1 2 + ( − 1 2 ) ) = − 1 -\frac{1}{2}+(-\frac{1}{2}))=-1 21+(21))=1

[ A + B ] 补码 [A+B]_{补码} [A+B]补码= 1.0000,而且对应的真值:A + B= - 1,由此可见,用补码表示定点小数时,它能表示–1的值。

  • 计算机中采用1位符号位判断时,为了节省时间,通常用符号位产生的进位最高有效位产生的进位异或操作后,按其结果进行判断。
  • (若异或结果为1 ,即为溢出;异或结果为0,则无溢出。
  • 例6.12中符号位有进位(1),最高有效位无进位(0),即 1 ⊕ 0 = 1 1\oplus 0 = 1 10=1,故溢出。
  • 例6.13中符号位有进位(1),最高有效位也有进位(1),即 1 ⊕ 1 = 0 1\oplus1=0 11=0,故无溢出。

双符号位:变形补码判断溢出

  • 变形补码 , 又称为模 4 补码 ( m o d    4 ) 双符号位的补码小数定义为 : D C ( x ) = [ x ] 补 = { x , 0 ⩽ x < 1 4 + x = 4 − ∣ x ∣ , − 1 ⩽ x < 0 ( m o d    4 ) 模 4 补码双符号位中 : 00 表示正 , 11 表示负 用在 A L U 中 变形补码,又称为模4补码(\mod 4) \\双符号位的补码小数定义为: \\ DC(x)=[x]_补= \begin{cases} x,&0\leqslant{x}<1 \\4+x=4-|x|,&-1\leqslant{x}<0 \end{cases} (\mod{4}) \\ 模4补码双符号位中:00表示正,11表示负 \\用在ALU中 变形补码,又称为模4补码(mod4)双符号位的补码小数定义为:DC(x)=[x]={x,4+x=4x,0x<11x<0(mod4)4补码双符号位中:00表示正,11表示负用在ALU
  • 变形补码判断溢出的原则是:

    • 当2位符号位不同时,表示溢出,

      • 计算结果的实际(正确)符号溢出的正负性(正溢出/负溢出)都取决于第一位符号位)
        • 00
        • 01(正溢出)
        • 10(负溢出)
        • 11
    • 否则,无溢出。

  • 不论是否发溢出,高位(第1位)符号位永远代表真正的符号。

  • 逻辑表达式

    • 将结果S的第一位和第二位符号位分别表示为 S S 1 , S S 2 S_{S_1},S_{S_2} SS1,SS2

    • V = S S 1 ⊕ S S 2 V=S_{S_1}\oplus{S_{S_2}} V=SS1SS2

      • 结果为1表示溢出否则没有溢出

1646377168720

  • 此时,符号位为“01”,表示溢出,又因第1位符号位为“0”,表示结果的真正符号为正,故“01”表示正溢出

1646377523312

  • 符号位为“10”,表示溢出。由于第1位符号位为1 ,则表示负溢出。
    上述结论对于整数也同样适用。
  • 在浮点机中,当阶码两位符号位表示时,判断溢出的原则与小数的完全相同。

硬件实际情况

  • 采用双符号位方案时,寄存器和主存中的操作数符号仍然只需要保留一位
  • 关键在于加法器中的符号位是两位
    • 在相加时,寄存器中的操作数的一位符号值 X s X_s Xs需要同时传送到加法器的两位符号位的输入端即可

采用一位符号位并根据最高数据位进位情况判断

  • 参与计算的2个数A,B的

    • 符号位分别记为 A s , B s A_s,B_s As,Bs
    • 最高数值位分别记为 a 1 = A x 1 , b 1 = B x 1 a_1=A_{x_1},b_1=B_{x_1} a1=Ax1,b1=Bx1
    • C s = A s + B s + C 1 C_s=A_s+B_s+C_1 Cs=As+Bs+C1
    • C 1 = C a r r y ( a 1 + b 1 + C 2 ) C_1=Carry(a_1+b_1+C_2) C1=Carry(a1+b1+C2)
      • C i = C a r r y ( a i + b i + C i − 1 ) C_i=Carry(a_i+b_i+C_{i-1}) Ci=Carry(ai+bi+Ci1)
        • ⋯ \cdots
        • 假设机器字长为 n + 1 ( 数值为部分 n 位 : x 1 ⋯ x n ) 假设机器字长为n+1(数值为部分n位:x_1\cdots{x_n}) 假设机器字长为n+1(数值为部分n:x1xn)
        • C n − 1 = C a r r y ( a n − 1 + b n − 1 + C n ) C_{n-1}=Carry(a_{n-1}+b_{n-1}+C_n) Cn1=Carry(an1+bn1+Cn)
        • C n = C a r r y ( a n + b n ) C_n=Carry(a_{n}+b_{n}) Cn=Carry(an+bn)
        • 这里 C a r r y ( ∑ p i ) 函数是取进位函数的意思 ( 对于二进制 , 其取值结果只有 0 / 1 两种可能 ) 这里Carry(\sum{p_i})函数是取进位函数的意思(对于二进制,其取值结果只有0/1两种可能) 这里Carry(pi)函数是取进位函数的意思(对于二进制,其取值结果只有0/1两种可能)
  • 如果符号位的进位 C s C_s Cs与最高数值为的进位 C 1 C_1 C1相同,说明没有溢出

    • 否则表示你溢出
  • 溢出判断逻辑表达式

    • V = C s ⊕ C 1 如果 V = 0 , 无溢出 否则溢出 V=C_s\oplus{C_1} \\如果V=0,无溢出 \\否则溢出 V=CsC1如果V=0,无溢出否则溢出
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PC_溢出概念+判断方法+示例 的相关文章

  • JVM:类的加载过程

    类的加载过程 类的加载过程整体可以分为五个阶段 xff1a 加载 验证 准备 解析 初始化 xff0c 其中验证 准备和解析又被概括为链接 加载 通过一个类的全限定名获取定义此类的二进制字节流 xff1b 将这个字节流所代表的的静态存储结构
  • Hive On Tez 进度条不显示问题修复

    问题描述 用Hive客户端使用beeline命令执行SQL的时候 xff0c 有些情况下会显示进度条 xff0c 有些情况不显示进度条 显示进度条的情况 设置默认执行引擎为Tez lt property gt lt name gt hive
  • DataTables从安装到入门的详细教程之一:DataTables介绍及安装

    DataTables介绍 Datatables是一款jquery表格插件 它是一个高度灵活的工具 xff0c 可以将任何HTML表格添加高级的交互功能 分页 xff0c 即时搜索和排序 几乎支持任何数据源 xff1a DOM xff0c j
  • CSS换行和不换行

    强制不换行 div white space nowrap 自动换行 div word wrap break word word break normal 强制英文单词断行 div word break break all
  • Linux:Shell脚本基本命令

    24 span class token keyword if span span class token punctuation span span class token punctuation span span class token
  • Spring Boot设置值:分别用@ConfigurationProperties和@Value给属性设值及其区别

    目录 64 ConfigurationProperties给属性映射值 编写JavaBean 编写配置文件 测试类 xff1a 运行结果 xff1a 64 Value给属性设置值 编写JavaBean 运行结果 xff1a 64 Confi
  • Mac Intrellij IDEA中使用debug调试

    目录 一 Debug开篇 二 基本用法 amp 快捷键 三 变量查看 四 计算表达式 五 智能步入 六 断点条件设置 七 多线程调试 八 回退断点 九 中断Debug 十 附 xff1a JRebel激活 Debug用来追踪代码的运行流程
  • Docker创建容器步骤解析

    创建hello world容器 以创建一个简单的hello world容器为例 xff0c 介绍docker创建容器的几大步骤 运行命令 xff1a docker run hello world docker运行步骤分析
  • 什么是代理服务器及其作用

    什么是代理服务器 代理服务器 xff08 Proxy Server xff09 是网上提供转接功能的服务器 xff0c 在一般情况下 xff0c 我们使用网络浏览器直接去连接其他Internet站点取得网络信息时 xff0c 是直接联系到目
  • sudo apt-get update执行失败问题解决

    错误 在执行sudo apt get update命令时 xff0c 执行结果失败 xff0c 错误信息如下 xff1a 获取 xff1a 1 http repo mysql com trusty InRelease 33 5 kB 100
  • @EntityListeners(AuditingEntityListener.class)介绍

    64 EntityListeners 源码 Specifies the callback listener classes to be used for an entity or mapped superclass This annotat
  • windows配置hadoop(详细)

    一 环境 windows7 64位 hadoop2 7 二 安装java1 8 xff0c 并配置环境变量 下载地址 xff1a http www oracle com technetwork java javase downloads j
  • Windows更新策略配置

    两个步骤 1 开启自动更新服务 2 配置自动更新策略 开启服务 Windows Update的服务名为wuauserv 可以通过命令行的方式进行开启 xff08 管理员权限 xff09 xff0c sc命令使用方法 xff1a sc命令使用
  • 数据库、MySQL与Python这一篇就够了

    lt 1 gt 数据库介绍 什么是数据库 xff1f 数据库 xff08 Database xff09 是按照数据结构来组织 存储和管理数据的仓库 xff0c 每个数据库都有一个或多个不同的API用于创建 xff0c 访问 xff0c 管理
  • Python:同行if...else...详细教程

    我最近为游戏Apple Clicker写成就系统 xff0c 加上后整个程序的代码竟然超过2200行 xff0c 窗口启动时间也很慢 xff0c 主要是if else 使用的太多 于是查了查缩短代码的方法 xff0c 总结如下 xff1a
  • ARM:驱动开发1

    linux内核模块 1 模块三要素 xff1a 内核模块不能单独执行 xff0c 也不能自动执行 span class token comment 入口 xff1a span span class token keyword static
  • Python:环境变量配置方法 详细教程

    最近有人问我如何配置python环境变量 xff0c 这篇文章就向大家介绍python环境变量配置方法 python环境变量的配置方法 xff1a 首先鼠标右键此电脑 xff0c 选择属性 xff1b 然后点击高级系统设置 xff0c 点击
  • Python - 字符串格式化详解(%、format)

    有人问我python的format函数怎么用 xff0c 这篇文章向大家介绍format函数用法 Python在字符串格式化的两种方式 format xff0c 关于整数的输出 o xff1a oct 八进制 d xff1a dec 十进制
  • Python 字典(Dictionary)操作详解

    这篇文章主要介绍了Python 字典 Dictionary 的详细操作方法 xff0c 需要的朋友可以参考下 Python字典是另一种可变容器模型 xff0c 且可存储任意类型对象 xff0c 如字符串 数字 元组等其他容器模型 一 创建字
  • Python中zipfile压缩包模块的使用

    本文主要介绍了Python中zipfile压缩包模块的使用 xff0c zipfile 模块提供了创建 读取 写入 添加及列出 ZIP 文件的工具 xff0c 本文做一个简单的总结 简介 ZIP 文件格式是一个常用的归档与压缩标准 xff0

随机推荐

  • python中@contextmanager实例用法总结

    本文是对python中 64 contextmanager的简单总结 在对于python中的装饰器 xff0c 我们一般会使用它辅助方法 在我们学习的上下文管理器中 xff0c 有一个 64 contextmanager装饰器 xff0c
  • 【Python】中文乱码问题与解决方案 深入分析

    一直以来 xff0c python中的中文编码就是一个极为头大的问题 xff0c 经常抛出编码转换的异常 xff0c python中的str和unicode到底是一个什么东西呢 xff1f 在本文中 xff0c 以 39 哈 39 来解释作
  • 004.CMake构建目标的小练习

    文章目录 HelloWorld项目与hello exeSayHello库的创建和使用查看依赖关系总结 前文说了如何使用add executable 和add library 命令定义对应的目标 xff0c 本文建立一个玩具项目 xff0c
  • swift 中错误处理

    swift 中错误处理 1 开发环境说明2 自定义错误类型3 try 的使用方式4 do catch的使用5 try 的使用方式6 defer的使用7 养眼图片一张 1 开发环境说明 系统版本 xff1a macOS Catalina 10
  • verilog实现基于Cordic算法的双曲函数计算

    Cordic算法可以用FPGA硬件来实现三角函数 xff0c 向量旋转 xff0c 指数函数以及三角函数等数值计算 xff0c 它是一种从一般的矢量旋转方程中推导得出 采用用不断的旋转求出对应的正弦余弦值 xff0c 是一种近似求解法 旋转
  • Matlab中table类型使用技巧

    在处理一些较复杂的表格数据时 xff0c 直接导入为数组并不方便处理 xff0c 这时候需要使用table类型数据来更好的存储和处理数据 例如 xff0c 在处理某实验数据时 xff0c 将excel直接导入至matlab中的table数据
  • C语言常用算法排序

    1 冒泡排序 xff08 面试常问 xff09 1 普通 span class token comment 小 gt 大 span span class token macro property span class token direc
  • javascript

    今天同事遇到一个跨域传值的问题 xff0c 源系统编码为UTF 8 xff0c 目标系统编码为GB2312 后来自己做了一个测试 写在这里 留作以后参考 源系统code br var i 61 34 http localhost 8080
  • linux 挂载分区 方法及参数

    挂载EXT2 EXT3分区时参数说明 xff1a 1 ro rw 只读 读写 2 exec noexec 允许 不允许执行 3 dev nodev 允许 不允许设备挂载 4 suid sgid nosuid nosgid 允许 不允许使用s
  • Linux中用户管理详解(上)--转发

    在 Linux 系统中 xff0c 所有的用户和组像一个国家 如果国家要繁荣昌盛的话 xff0c 需要治理得当 xff0c 需要有主 席或者总统 xff0c 以及地方官员和老百姓组成 在 linux 中如果你对安全需求比较苛刻 xff0c
  • Linux用户管理详解(中)-转发

    在我的上一篇 Linux中用户管理详解 上 我们已经明白通过命令useradd 每创建一个用户都会在相应的配置文件中添加相关的信息和创建用户的宿主目录 其实今天要和大家说的是和用户相关的linux 安全问题 xff0c 在安全中有一种技术人
  • Linux用户管理详解(下)--转发

    我们已经可以通过创建不同的用户来防止其他人使用自己的账号 xff0c 之后每个账户对应一个单独的用户密码 xff0c 构成了一个基本的用户管理思路 为了方便管理还可以使用组来设置相同属性的用户 那么设置这些到底是为了什么呢 xff1f 今天
  • scrollView不能通过遍历subviews来获得需要的数据

    scrollView不能通过遍历subviews来获得需要的数据 因为其默认包含imageviews After magnifying the UIImageView and tweaking with configurations I h
  • vmware关闭侧通道缓解(windows端)

    文章目录 shutdown the vm ossettingsoptions中文设置 shutdown the vm os 建议打开虚拟机操作系统 在系统中执行关机指令外部关机 power off 会导致数据丢失 settings opti
  • matlab_将矩阵各行逆序(左右顺序对调)

    文章目录 以一个方阵为例 每一列逆序注意 39 39 和 39 39 以一个方阵为例 span class token operator gt gt span A span class token operator 61 span magi
  • windows10@安装英语语言包异常_挂起中@设置搜索框的异常(总是搜不出任何结果)问题

    文章目录 删除指定目录注销或重启您的计算机windows10 64 11 64 设置搜索框的异常 总是搜不出任何结果 问题显示语言配置 删除指定目录 Go to the following directory to delete this
  • You-Get 就是这么强势!

    前言 You Get是什么 xff1f 相信有很多人 xff0c 应该还不知道它的来历 xff0c 其实它就是一款支持众多网站视频下载的神器 xff0c 既可以在命令提示符中操作 xff0c 也可以在Python代码中运行 xff0c 跟现
  • word@快捷键@域和交叉引用@样式设置@字号和单位@语言设置@粘贴格式设置

    文章目录 word跳转 64 引用 64 标注其他 快捷键快捷键设置从功能搜索中配置快捷键 64 定制工具栏 word中的域 x1f388 交叉引用文献引用标注流程技巧 样式 x1f388 refs样式配置基础样式 style based
  • android studio4.+删除已下载的虚拟机镜像

    文章目录 settings sdk settings sdk 点击ok
  • PC_溢出概念+判断方法+示例

    文章目录 PC 溢出概念 43 判断方法 43 示例ref分类定点计算机中的溢出定点机溢出示意图 在浮点计算机中的溢出浮点机溢出示意图 溢出简易判断规律溢出的必要条件定点数 x1f388 补码运算判断溢出方法用一位符号位判断溢出例例 双符号