溢出标志位OF与进位标志位CF判断
1、OF与CF概述
- OF(Overflow Flag,溢出标志位):有符号数之间加减运算的溢出标志
- CF(Carry Flag,进位标志位):无符号数之间加减运算的溢出标志
- 快速判断(加法)(减法可转换为加法)
- 有符号数的符号位进位和最高位进位不同时,OF=1,否则OF=0(记忆:0+0必然不溢出,此时符号位和最高位的进位相同,均为0)
- 无符号数的最高位进位为1时,CF=1,否则CF=0
- 对有符号数而言,
- 同号相减,不溢出,OF=0
- 异号相加,不溢出,OF=0
- 对无符号数而言,
- 大减小,不溢出,CF=0
- 小减大,溢出,CF=1
- 注意
- 二进制数的加减运算会导致OF和CF变化
- 原因:整数的加减运算没有本质上的不同,都是二进制数字间进行加减运算
- 虽然说OF是与有符号数有关,但无符号数进行运算时,OF也会被改变,但此时OF无意义,没人在乎他
- 同理,有符号数运算时,CF也会相应发生变化,我们也不关心CF的变化
- 二进制数的加减运算会导致OF和CF变化
- 小tips
- 减法转换为加法,直接用二进制算,从而可方便地判断溢出:[x]补-[y]补=[x]补+[-y]补
2、OF
- 加法判断
- 异号数相加,必然不溢出,OF=0
- 十进制:两有符号数相加,结果溢出,则OF=1,否则OF=0
- 溢出:结果超过该数据类型的表示范围,一般为-2n-1~2n-1-1,n为有符号整数的位数
- 二进制:同号有符号数相加,若结果与它们符号不同,则OF=1,否则OF=0
- 减法判断
- 同号数相减,必不溢出
- 十进制:若有符号数相减,结果溢出,则OF=1,否则OF=0
- 溢出:结果超过该数据类型的表示范围,一般为-2n-1~2n-1-1,n为有符号整数的位数
- 二进制:异号有符号数相减,结果与被减数符号不同,则OF=1,否则OF=0
3、CF
- 加法判断
- 十进制:两无符号数相加,结果溢出,则CF=1,否则CF=0
- 溢出:结果超过该数据类型的表示范围,一般为0~2n-1,n为无符号整数的位数
- 二进制:无符号数的最高位进位为1时,CF=1,否则CF=0
- 十进制:两无符号数相加,结果溢出,则CF=1,否则CF=0
- 减法判断
- 十进制:两无符号数相减,结果溢出,则CF=1,否则CF=0
- 溢出:结果超过该数据类型的表示范围,一般为0~2n-1,n为无符号整数的位数
- 简化判断:被减数小于减数字,如6-9,溢出
- 二进制:两无符号数字相减,最高位发生借位,则CF=1,否则CF=0
- 十进制:两无符号数相减,结果溢出,则CF=1,否则CF=0
溢出标志位OF与进位标志位CF判断的更多相关文章
- 对所有CPU寄存器的简述(16位CPU14个,32位CPU16个)
32位CPU所含有的寄存器有:4个数据寄存器(EAX.EBX.ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)6个段寄存器(ES.CS.SS.DS.FS和GS)1 ...
- PIC单片机状态寄存器中的C(进位/借位位标志)
查阅PIC单片机芯片手册,关于进位/借位位的说明为: C:进位/借位位. 1 = 结果的最高位发生了进位 0 = 结果的最高位未发生进位 同时有一条标注:借位的极性是相反的. 通过以上说明,可以将C的 ...
- 传输层的端口与TCP标志中的URG和PSH位
一.协议端口号的提出 运输层提供了进程间通信的能力(即端-端通信).但是不同的操作系统可能无法识别其他机器上的进程.为了用统一的方法对 TCP/IP体系的应用进程进行标志,使运行不同操作系统的计算机的 ...
- Leetcode2--->链表中对应位相加(进位)
题目: 给定两个单链表,单链表中的数都是非负数.链表中的数字都是反向存储的,,每个节点都是个位数,将链表对应的位相加,返回最终的结果: 举例: Input: (2 -> 4 -> 3) + ...
- 64位系统上运行32位程序能否申请到8G内存?
申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来讲,申请8G的存储空间没有任何意义,因为32位的程序最大寻址空间只有4G,32位程序在编译之后的机器代码也只有32位 ...
- VS2010在64位系统中连接64位Oracle出现的问题和解决方法
C#使用System.Data.OracleClient连接Oracle数据库.我的是window7/64位系统,装了一个64位的oralce 11G r2 客户端是64位的 用VS10调试错误信息如 ...
- 在64位Windows7上安装64位Oracle11g
我一直在用Oracle10g数据库,最近想看看11g怎么样,就试着装了一下,在安装过程中遇到的麻烦还不少,幸好有搜索引擎,根据前辈的指点,磕磕绊绊地也将Oracle装上了,作一下记录,以后也许能用得着 ...
- 如何在64位windows7上同时使用32位和64位的Eclipse
我用的是64位的windows7旗舰版,jdk1.7 64位机器上可以同时运行32位和64位的Eclipse,但是电脑中必须有相应的jdk.Eclipse虽然不需要安装,但是在启动时会检查系统中固定文 ...
- CLR调试报错“Visual Studio远程调试监视器 (MSVSMON.EXE) 的 64 位版本无法调试 32 位进程或 32 位转储。请改用 32 位版本”的解决
Win7 64位电脑上进行visual studio的数据库项目的CLR存储过程进行调试时,报错: ---------------------------Microsoft Visual Studio ...
- 64位系统下注册32位dll文件
64位系统下注册32位dll文件 在64位系统里注册32位软件所需的一些dll会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以加载32的导致. 若要支持的32 位和64 位C ...
随机推荐
- 2022的ShellCTF之web_WP
Extractor: 考点是SQL注入,不过数据库不是mysql,而是sqlite 首先尝试了:1' or 1=1# 尝试1' or 1=1 -- 发现有东西,使用 :order by 判断列表,知道 ...
- Cryptohack的Adrien's Signs解题思路
题目如下: 输出的结果: 题目分析: 在原题的题目描述中并没有什么有用的消息,更多的信息是通过代码审计出来的.大致意思是,先把字节flag转换为二进制形式的字符串,然后判断字符串中每个字符,如果为1, ...
- 详解JAVA线程问题诊断工具Thread Dump
摘要:Thread Dump是非常有用的诊断Java应用问题的工具. 本文分享自华为云社区<调试排错 - Java 线程分析之线程Dump分析>,作者:龙哥手记. Thread Dump是 ...
- .Net 7 的AOT的程序比托管代码更容易破解?
楔子 .Net 7的一个重要功能是把托管的源码编译成Native Code,也就是二进制文件.此举看似增加了程序反编译难度,实际上是减少了程序的破解难度.本篇在不触及整个程序架构的前提下,以简单的例子 ...
- IT编程相关内容汇总 - 进阶者系列 - 学习者系列文章
笔者工作了十多年了,对于技术也有一定的经验,但是IT编程技术的更新是挺快的,特别是各种框架,各种中间件啥的都涌现出来了.这篇博文笔者打算将IT编程的前端.后端.数据库和移动端做一个博文知识汇总,让阅读 ...
- Java学习笔记:2022年1月9日(其一)
Java学习笔记:2022年1月9日(其一) 摘要:这篇笔记主要记录了Java运行时中的两种变量.以及参数的两种传递方式. 目录 Java学习笔记:2022年1月9日(其一) 1.不同变量的详细探讨 ...
- App几个可能造成内存泄漏的情况:
App几个可能造成内存泄漏的情况: 1.block块中直接用self调用,self将会被block copy到内部增加一次饮用计数,形成循环引用 在block里调用self会不会造成循环引用和这个bl ...
- MySQL优化四,高性能优化
一,查询优化器 这个部分的整个过程是由MySQL的存储引擎来做的,优化器就会根据存储引擎来使用原来的开销, 优化后的开销,哪个更好一点? 1.如果是查询语句(select语句),首先会查询缓存是否已有 ...
- 详解 Gulp4 和 Gulp3 的区别
最近在开发几个网站,为了优化一下前端代码,就复习一下gulpjs,之前工作gulp用的版本比较老,但是今天看了新的版本,新的语法出了一下,但是为了时间,我决定使用之前gulp3的旧版本,后面发现自己环 ...
- vue学习笔记(一) ---- vue指令(v-for 和 key 属性)
vue指令之v-for和key属性 一. v-for 1. v-for遍历数组 <div id="app"> <h3>好饿,我好想吃~~~~</h3& ...