CPU如何区分溢出和自然进位?

之前学习补码的时候倒是学会了基本概念,但是最近又接触时发现还有不清楚的地方,所以又研究了下

今天的核心问题的“CPU是如何区分高位自然舍弃和溢出的?

先给出结论:如果运算中,数值位最高位(也就是有符号数的正数第二位)和符号位(也就是正数第一位)同时进位,则是自然舍弃。两者间如果只有一个进位,则是溢出。

下面来讲解一下。运算的所有情况可以划分为四种:

  1. 符号位进位,数值最高位不进位
  2. 符号位不进位,数值最高位进位
  3. 符号位和数值最高位都进位
  4. 符号位和数值最高位都不进位

对于第四种情况,就没什么好说了,都不进位的话根本涉及不到区分的问题。

对于第一种和第二种情况都好理解:对于第一种情况,既然数值最高位没有进,那么符号位的进位就一定是完全由符号位导致的,也就是说符号位一定是两个1,那么这样进位的结果就是符号位为0——两个负数加法运算结果为正数,当然是溢出了。第二种也是同理,数值最高位进位了而符号位没有进,只能说明原来符号位是两个0,那么就是两个正数相加结果为负数,溢出无疑了。

比较复杂一点的是情况3,它又可以细分为:

  1. 两个数符号位都是1
  2. 一个数符号位为1,另一个是0

要讲清楚这里的内容,我们要了解一下究竟什么是溢出?我们以4位二进制数为例,它的表示范围是[-8,7]。注意,溢出是结果错误,但不是二进制加法本身有错误,我们所说的溢出,是指在对二进制加法的结果进行截取后,截取的结果和算术运算的结果不符,而造成溢出的原因就是计算的结果超出能表示的范围。而对于情况2,一个正确表示的正数和一个正确表示的负数相加,结果一定是不会超出表示范围的,这里的进位就只能是自然进位。对于1,两个负数相加什么情况下才会溢出呢?就是超出表示范围的情况,而对于负数,除了符号位之外,数值位0越多数就越小。在1的前提下,能找到的最小的负数就是1010和1110,其分别是-6和-2,加起来正好是-8不超范围。所以这种情况也被证明了不会溢出了。

综上,我们证明了只有在符号位和数值最高位两个里面只有一个进位的时候才是溢出,依次为据我们就可以设计CPU指令了。

CPU如何区分溢出和自然进位?的更多相关文章

  1. 8086 CPU 寄存器简介

    转载:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 引子 打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些 ...

  2. [转帖]8086 CPU 寄存器简介

    8086 CPU 寄存器简介 https://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html 哎 没看完 感觉好复杂. 引子 打算写几篇 ...

  3. (转)计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理

    原文:https://blog.csdn.net/cc_net/article/details/10419645 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体 ...

  4. 计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理

    前言 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体. 依旧记得当时在同学家看同学输入几个DOS命令就成功的打开了一个游戏,当时实在是佩服的五体投地.因为对我来 ...

  5. 如何迅速分析出系统CPU的瓶颈在哪里?

    内容出自极客时间专栏<Linux 性能优化实战> CPU 的性能指标那么多,CPU 性能分析工具一抓一大把,换成实际的工作场景,该观察什么指标.选择哪个性能工具呢? 不要担心,今天我就以多 ...

  6. WinDbg调试CPU占用高的问题 试验+实战 《第七篇》

    一.High CPU试验 1.示例代码 static void Main(string[] args) { Console.Clear(); Console.WriteLine("到命令行下 ...

  7. linux下cpu物理个数、多核、超线程判断解析

    在Linux体系中,供给了proc文件体系显示体系的软硬件信息.若是想懂得体系中CPU的供给商和相干设备信息,则可以经由过程/proc/cpuinfo文件获得.本文章针对该文件进行简单的总结. 基于指 ...

  8. tf.device()指定tensorflow运行的GPU或CPU设备

    在tensorflow中,我们可以使用 tf.device() 指定模型运行的具体设备,可以指定运行在GPU还是CUP上,以及哪块GPU上. 设置使用GPU 使用 tf.device('/gpu:1' ...

  9. cpu的核数

      相信大多数的人都知道CPU区分单核.双核.四核.六核.八核等,一些电脑小白肯定认为核心越多肯定性能越强,但是不少装机用户发现,有的CPU型号虽然是双核,但是要比一些四核还要贵,很多人感到迷惑,那么 ...

随机推荐

  1. JS基础_break跳出外层循环

    可以为循环语句创建一个label,来表示当前循环 label:循环语句 使用break语句时,可以在break后跟着一个label 这样break会结束指定的循环 outer: for(let i=0 ...

  2. Nginx事件管理之定时器事件

    1. 缓存时间 1.1 管理 Nginx 中的每个进程都会单独地管理当前时间.ngx_time_t 结构体是缓存时间变量的类型: typedef struct { /* 格林威治时间1970年1月1日 ...

  3. Mac安装软件提示文件损坏

    Mac安装软件提示文件损坏,请移至废纸篓 sudo spctl --master-disable

  4. 重入锁 ReentrantLock (转)(学习记录)

    重入锁(ReentrantLock)是一种递归无阻塞的同步机制.以前一直认为它是synchronized的简单替代,而且实现机制也不相差太远.不过最近实践过程中发现它们之间还是有着天壤之别. 以下是官 ...

  5. AutoItLibrary测试Windows GUI

    AutoItLibrary库关键字 AutoItLibrary 的对象操作大体上有几大主要部分,Window 操作.Control 操作.Mouse 操作.Process操作.Run 操作.Reg 操 ...

  6. ubuntu 18.04 64bit下如何源码编译安装anbox

    1. 准备工作 1.1 安装gcc 7.x版本 sudo apt-get install gcc-7 -y 1.2 安装依赖的库及其工具 sudo apt install build-essentia ...

  7. BFC是什么?有什么作用?

    BFC(Block Formatting Context)直译为“块级格式化范围”. 一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: ...

  8. pandas数据分析案例

    1.数据分析步骤 ''' 数据分析步骤: 1.先加载数据 pandas.read_cvs("path") 2.查看数据详情 df.info() ,df.describe() ,df ...

  9. windows文件上传到linux服务器上

    https://blog.csdn.net/m0_37751917/article/details/80739850 1:检查是否安装sz  rz rpm -qa |grep sz rpm -qa | ...

  10. BCP 数据导出

    EXEC master..xp_cmdshell 'BCP test.dbo.name out d:\t_002.txt -c -t -T' EXEC master..xp_cmdshell 'BCP ...