处理器内部以补码表示有符号数,8个二进制位能够表达的整数范围是:+127 ~ -128,16位表达的范围是:+32767 ~ -32768.如果运算结果超出了这个范围,就是产生了溢出;有溢出,说明有符号数的运算结果不正确.

例如:3AH + 7CH=B6H,就是58 + 124=182,已经超出-128 ~ 127范围,产生溢出,所以OF = 1。从另一方面看,补码B6H表达值是-74,显然运算结果也不正确。

溢出标志OF和进位标志CF是两个意义不同的标志.

进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;

溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。

请看例子

例1:3AH + 7CH=B6H

无符号数运算:58+124=182,范围内,无进位

有符号数运算: 58+124=182 ,范围外,有溢出

例2:AAH + 7CH=(1)26H

无符号数运算:170+124=294,范围外,有进位

有符号数运算:-86+124=38 ,范围内,无溢出

处理器运算器对有符号数的运算过程(猜想):

处理器对两个操作数进行运算时,首先需要转换成补码(有符号数在计算机中都是以补码形式存储的),这两个补码按照无符号数求得结果(符号位也参与运算),如果有进位的话,舍去(即按无符号数运算产生的进位不考虑,这个进位对于有符号数运算是没有意义的);同时,根据是否超出有符号数的范围设置溢出标志OF。

怎样判断有符号数运算是否产生溢出:

只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出;其他情况,不会产生溢出。

编程时需要注意的:

应该利用哪个标志,则由程序员来决定。如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。

进位位(carry)与溢出位(overflow)的区别的更多相关文章

  1. bit,byte,char,位,字节,字符 的区别

    bit,byte,char,位,字节,字符 的区别 原创文章,未经作者允许,禁止转载!!!

  2. Verilog HDL按位操作符与归约操作符的区别

    sdaPipe <= {`DEB_I2C_LEN{1'b1}}; {{}} 为一种赋值运算符,将一个表达式放入双重花括号中,而复制因子放在第一层花括号中,用来指定复制的次数. { }表示拼接,{ ...

  3. 详解 比特(位,bit),字节(Byte),字符的区别 *(转)

    比特(位):英文bit,是计算机晶体管的一种状态(通电与断电).就是0与1,真与假,是计算机最基本的传输单位. 示例: 2bit : 10; 4bit : 1111; 8bit : 1111 1111 ...

  4. 16位的MD5加密和32位MD5加密的区别

    16位的MD5加密和32位MD5加密的区别 MD5加密后所得到的通常是32位的编码,而在不少地方会用到16位的编码它们有什么区别呢?16位加密就是从32位MD5散列中把中间16位提取出来!其实破解16 ...

  5. Linux64位程序中的漏洞利用

    之前在栈溢出漏洞的利用和缓解中介绍了栈溢出漏洞和一些常见的漏洞缓解 技术的原理和绕过方法, 不过当时主要针对32位程序(ELF32). 秉承着能用就不改的态度, IPv4还依然是互联网的主导, 更何况 ...

  6. 剑指offer用位运算实现两个数相加,及python相关的位操作

    题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution:    def Add(self ...

  7. TCP/IP协议与UDP协议的区别

    TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起来, ...

  8. TCP协议与UDP协议的区别

    TCP协议与UDP协议的区别(转) 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  9. UDP和TCP的区别(转)

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

随机推荐

  1. eclipse设置快捷键sysout+Alt+/后出System.out.println!亲測可用!

    曾经一直用myeclipse,没有这方面的顾虑,如今换到了eclipse,非常多要自己设置了,比方非常多快捷键. 最经常使用的,执行到sysout ,eclipse总是不自己主动补全,非常是恼火!!! ...

  2. Java虚拟机学习 - 对象访问

    对象访问会涉及到Java栈.Java堆.方法区这三个内存区域. 如下面这句代码: Object objectRef = new Object(); 假设这句代码出现在方法体中,"Object ...

  3. Ajax之旅(一)--什么是Ajax

    本来在学习DRP,但是无意中发现所附资料中有一些參考书籍,当中就有一个关于Ajax的,看了看,挺好的,于是决定暂停一下DRP,再次学习一下Ajax.记得第一遍学习Ajax的时候认为真的是一团雾水,看了 ...

  4. “:Choose a destination with a supported architecture in order to run on this device.”

    我在编译从GitHub上clone下来的<TweeJump>时,出现如下错误:":Choose a destination with a supported architectu ...

  5. AIDL通信原理

    AIDL (Android Interface Definition Language),通过定义通信接口来实现进程间通信.这是Google提供的一种在安卓应用进程间通信的工具.所以要了解AIDL的通 ...

  6. DELETE---删除记录

    DELETE FROM table_name [WHERE conditions]; 例: DELETE FROM userinfo WHERE name='zhangsan'; 说明 1.不添加条件 ...

  7. (转)OpenVPN下载、安装、配置及使用详解

    原文地址:http://www.365mini.com/page/14.htm OpenVPN简介 OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network)加密通道的 ...

  8. mysql查询练习

    mysql> #查询每个栏目最贵的商品 mysql> select goods_id,shop_price,cat_id from (select goods_id,shop_price, ...

  9. netMVC 搭建Ucenter 同步登陆退出discuz

    先看一下效果

  10. C#测量程序运行时间及cpu使用时间

    转载:http://www.cnblogs.com/yanpeng/archive/2008/10/15/1943369.html 对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理 ...