溢出OF和进位CF标志位的判定

溢出OF和进位CF标志位的判定一、学习CF与OF,要始终牢记一点。CF是无符号数溢出标志,OF是有符号数溢出标志。通俗一点说就是,即使有符号数相加/相减导致了CF=1也没什么意义,不能说明结果的正确与否。此时,OF=1,则说明结果溢出,出现错误;OF=0,说明结果正确。这个过程根本和CF没关系,CF=1/0,都不会影响。同理也可以得出OF对无符号数也无影响。举个例子:[9-6]补=[9]补-[6]补=[9]补+[-6]补[9]…

大家好,又见面了,我是你们的朋友全栈君。

一、学习CF与OF,要始终牢记一点。CF是无符号数溢出标志,OF是有符号数溢出标志。

通俗一点说就是,即使有符号数相加/相减导致了CF=1也没什么意义,不能说明结果的正确与否。此时,OF=1,

则说明结果溢出,出现错误;OF=0,说明结果正确。这个过程根本和CF没关系,CF=1/0,都不会影响。同理也

可以得出OF对无符号数也无影响。

举个例子:

[9-6]补=[9]补-[6]补=[9]补+[-6]补

[9]补-[6]补

                00001001

            –   00000110

            ——————

                 00000011

            此时,OF=0,CF=0

 

[9]补+[-6]补

              00001001

          +  11111010

           ——————

           1  00000011

           此时,OF=0,CF=1

大家可能已经发现了,通过公式将减法转换成加法,貌似不完全等价,因为CF不同。

其实不然,CF的值不影响结果,此时不论是加法还是减法都是有符号数。不论CF=1/0,只要OF=0,

结果都是正确的。当然,还有一点值得注意。毕竟CF在两种计算方法中取值不同,如果有条件跳转

指令的话,程序的执行可能会受到影响。

 

二、简单介绍下CF与OF的计算方法

1、CF的判断

①加法

十进制角度,如果两无符号数相加,结果大于2^n-1(n为位数),则CF=1,否则CF=0;

二进制角度,如果两无符号数相加,最高位向前有进位,则CF=1,否则CF=0。

②减法

十进制角度,如果两无符号数相减,减数大于被减数(也即结果不在0—2^n-1内),则CF=1,否则CF=0;

二进制角度,如果两无符号数相减,最高位向前游借位,则CF=1,否则CF=0。

2、OF的判断

①加法

十进制角度,如果两有符号数相加,结果不在-2^(n-1)~2^(n-1)-1内,则OF=1,否则OF=0;

二进制角度,如果两有符号数同号,而相加结果与之异号,则OF=1,否则OF=0。

②减法

十进制角度,如果有符号数相减结果在-2^(n-1)~2^(n-1)-1内,则OF=1,否则OF=0;

二进制角度,如果两个数异号,而相减结果与被减数符号相反,则OF=1,否则OF=0。

 

三、这里值得一提的是,在第二部分介绍的计算规则,说白了都是为了方便人的计算。而在计算机中,

CPU根本不知道参与运算的数是有符号的还是无符号的。它只是按照一定的指令、一定的规则来计算,

然后设置标志、运用标志。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158241.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • a标签下划线的距离问题[通俗易懂]

    a标签下划线的距离问题[通俗易懂]需求a标签下划线距离太接近了,需要调整一下页面代码<pclass=”text_align_r”><spanclass=”ordersave_info”><s:textname=”order_submited_tip”/></span><ahref=”/to_be_signed.html”><s:textname=”order_submited_a_tip”/></a></p&

    2022年6月7日
    47
  • 【Java】深入理解Java随机数

    【Java】深入理解Java随机数本文介绍Java随机数的内容

    2022年7月26日
    5
  • ffmpeg从入门到精通 下载_从入门到精通nginx——Nginx的下载和环境安装

    ffmpeg从入门到精通 下载_从入门到精通nginx——Nginx的下载和环境安装Nginx的下载  nginx的官网:http://nginx.org/  百度云盘地址https://pan.baidu.com/s/1kjQST_x1Sf_thg3XDmqx6w密码:18sc将nginx上传至linux环境搭建安装C语言环境  因为nginx是C语言写的,而且是源码安装,安装前需安装C语言环境。安装依赖库  基本的Nginx功能依赖于一些基本的库,在安装Nginx之前需要提…

    2022年6月26日
    17
  • c语言位运算符的用法_c语言中位运算符及其含义

    c语言位运算符的用法_c语言中位运算符及其含义1;位运算;程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。(均以二进制的补码形式)整数;及只能是带符号或者无符号的char,short,int,long类型;2;c语言中的6种位运算符;&按位与——如果两个相应的二进制位都为1,则该位的结果值为1,否则为0;|按位或——两个相应的二进制位中只要有一个为1,该位的结果值

    2022年9月28日
    0
  • oracle存储过程语法与使用

    oracle存储过程语法与使用oracle存储过程的基本语法1.基本结构  1CREATEORREPLACEPROCEDURE存储过程名  2IS  3BEGIN  4NULL;  5END;行1:CREATEORREPLACEPROCEDURE是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程,如果存在就覆盖它;行2:  IS关键词表明后面

    2022年7月17日
    12
  • ffmpeg hevc_ffmpeg视频解码

    ffmpeg hevc_ffmpeg视频解码本次目标:1)将容器中的音频码流和视频码流分离出来。2)针对mp4文件中的码流情况进行修复。解封装的基本过程:#include<stdio.h>#include”libavcodec/avcodec.h”#include”libavformat/avformat.h”//MPEG-TS文件解封装得到的码流可播放,MP4解封装得到的码流不可播放;//这与容器的封装方式有关。voiddemuxer(constchar*url){//初始化格式上下文

    2022年10月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号