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. LeetCode 105. 从前序与中序遍历序列构造二叉树(Construct Binary Tree from Preorder and Inorder Traversal)

    题目描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9, ...

  2. Web存储机制—sessionStorage,localStorage使用方法

    Web存储机制,在这里主要聊有关于Web Storage API提供的存储机制,通过该机制,浏览器可以安全地存储键值对,比使用cookie更加直观.接下来简单的了解如何使用这方面的技术. 基本概念 W ...

  3. spring boot知识清单

    https://mp.weixin.qq.com/s/q8OI2Ou8-gYP-usjToBbkQ

  4. OpenCV学习笔记(14)——轮廓的性质

    提取一些经常使用的对象特征 1.长宽比 边界矩形的宽高比                                       x,y,w,h = cv2.boundingRect(cnt) a ...

  5. LC 894. All Possible Full Binary Trees

    A full binary tree is a binary tree where each node has exactly 0 or 2 children. Return a list of al ...

  6. javascript定时器方法使用

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Redis常见报错之 Redis::CommandError (MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk)

    在Redis运行过程中,报错信息如下: Redis::CommandError (MISCONF Redis is configured to save RDB snapshots, but it i ...

  8. 【VBA】学习中出现的错误

    1.自定义函数 自定义函数尽量不要使用,容易导致excel卡,让你怀疑人生!!!

  9. vue-cli3的安装使用

    一.安装vue-cli3 1.全局安装vue-cli 使用命令 cnpm install  -g @vue/cli . npm install  -g @vue/cli.yarn global add ...

  10. jQuery页面加载完毕事件及jQuery与JavaScript的比较

    1.jQuery概述 jQuery是一个JavaScript库,它集成了JavaScript.DOM.CSS和Ajax,简化了JavaScript编程,提倡write less, do more. 2 ...