i++与++i的效率差别

为什么说++i的效率比i++高? 来源:公众号【编程珠玑】 作者:守望先生 网站:https://www.yanbinghu.com/2019/09/09/58833.html 前言 不知道你是否听说过++i比i++快的说法,真的如此吗? ++i与i++的区别 这两个表达式从我们初学编程语言的时候就会接触到。前者是自增后取值,后者是取值后自增。 我们看一个简单的例子。 #include<iostream&g... 阅读详情


i++与++i的区别,我就不多说了。今天主要说明一下它们的效率上的差别。


如果只是对内建数据类型(如int),两者的差别很小,基本上没有,这个可以从汇编代码上看出来。

但是如果对于C++里的类,那++i和i++两个是运算符重载,它们的区别就比较明显了:

i++和++i的   最重要的区别大家都知道就是   +1和返回值的顺序  
  但,两这还有一个区别(在C++中)就是i++在实现的时候,产  
  生了一个local   object  
  class   INT;  
  //++i   的版本  
  INT   INT::operator++()  
  {  
          *this=*this+1;  
          return   *this;  
  }  
  //i++   的版本  
  const   INT   INT::operator   ++(int)  
  {  
            INT   oldvalue=*this;  
            *this=*this+1;  
            return   oldvalue  
  }  
   
  所以从效率上来说++i比i++来的更有效率  


for(i = n; i > 0; i--)
{
…
}

for(i = 0; i < n; i++)
{
…
}

为什么前者比后者快?

我当时的解释是:

i--操作本身会影响CPSR(当前程序 状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i > 0,可以直接通过Z标志判断出来。

i++操作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i < n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。

drm 之modes #define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <time.h&... 阅读详情

相关推荐

探针卡技术演进:从金线微针到MEMS探针的Wafer Sort革命

本文探讨了探针卡技术从传统金线微针到MEMS探针的演进,及其对晶圆测试(Wafer Sort)的革命性影响。随着芯片焊垫间距进入45微米以下,MEMS技术凭借其超高精度、超长寿命和卓越的信号完整性,成为应对高密度、高速及3D IC测试挑战的关键,显著提升了测试效率与稳定性。

lstm7chronicler的博客 365

【C语言】i++和++i的区别是什么?哪个效率高?为什么?

写这篇文章主要的目的就是想把看到的一些好的C语言习题摘录下来。 执行效率 理论上,i++的执行效率比++i的执行效率要高。 ++i不用生成临时变量,而i++要生成临时变量。 这个会因编译器有所区别,有的编译器会对这个流程进行优化。 例如直接汇编相应的代码,结果如下: 可以看到它们的执行效率是差不多的。 执行逻辑 i++表示先赋值后加1;i++实现的是,运算结束之后进行自加运算,换句话说这一句跑到分号之后才会有自加效果。 ++i表示先加1再赋值;++i正好相反,是在这一句的一开始就进行.

诸葛一帆丶的博客 8603

概率论—期末复习速成笔记(自用)

概率论期末复习

a200327的博客 2万+

一文带你彻底搞懂i++和++i的区别,谁的效率更高?

作者简介:Codebowl靓仔,学妹的工具人,C++开发误入数据开发,梦想30岁退休的靓仔就是我啦。 i++和++i对于初学者来说,一直是一个特别容易搞混的内容,相信很多人现在也没有完全搞清(作者初学的时候就一直稀里糊涂的,老师在讲这个的时候也一笔带过了)。 不过今天不用怕,看完这篇文章,相信你一定能搞清楚这俩个的区别! 一文带你彻底搞懂i++和++i的区别,谁的效率更高?基本概念++i和i++的区别i++和++i的原理单独使用时参与运算时i++和++i那个效率更高? 基本概念 两者的作用都是自增加1。.

CodeBowl的博客 4万+

AAC编解码器在实时通信中的性能对比与应用选择

本文深入分析了AAC编解码器在实时通信中的性能优化,重点对比了faac、faad2与fdk-aac三大开源方案在WebRTC场景下的表现。通过实测数据揭示其在延迟、音质和资源消耗等关键指标的差异,并提供场景化选型建议与调优技巧,帮助开发者提升实时音视频通信质量。

weixin_29210727的博客 389

为什么需要知识图谱?什么是知识图谱?——KG的前世今生

我的知乎专栏,对知识图谱感兴趣的朋友可以关注。标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们先给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术

SimmerChan的专栏 8万+

i++与++i的运算和效率区别

i++与++i的运算和效率区别

金属服务,美好生活,天网改变世界,华帝量子科技。 3026

VFH避障/局部路径规划算法

VFH避障/局部路径规划算法 本文章是我看《The Vector Field Histogram-Fast Obstacle Avoidance for Mobile Robots》论文时候的笔记,感兴趣的欢迎去看原论文。 VFH中有一些概念是从其他算法中借鉴过来的,并且VFH算法本身就是对VFF(Virtural Force Field)的一种改进,其中有很多的相似之处。所以按照原论文的思路,先介绍由CMU提出的Certainty Grid算法中的一些概念,再介绍一下势场法中的一些概念,接着介绍一下VFF

qq_41845878的博客 8118

C语言基础-- i++与++i 区别及效率原因

i++先取值再自增++先自增再取值。

weixin_45953024的博客 744

《Python入门到精通》函数详解

函数就是一段「封装」起来的「代码」,目的是提高代码的「模块性」和「复用性」。 2、函数的参数 2.1、变量的就近原则 2.2、传递参数 2.3、形参和实参 2.4、位置参数 2.5、缺省参数 2.6、可变类型和不可变类型 2.7、关键字参数 3、匿名函数 4、函数的返回值

wangyuxiang946的博客 1万+

基于STM32L4XX、HAL库的STS40-CD1B-R3温度传感器 驱动程序设计

/ HAL库需要左移一位。// 每2秒读取一次。// 等待测量完成 - 高精度模式大约需要15ms。// 执行软复位确保传感器处于已知状态。温度测量范围:-40°C ~ +125°C。湿度测量范围:0% ~ 100% RH。// 复位后需要等待至少1ms。// 初始化STS40传感器。// 读取温湿度数据。// 转换原始数据为实际值。// 发送读取序列号命令。// 读取序列号数据。湿度精度:±1.5% RH。

zhusl6688的博客 287

for循环用i++和++i哪个效率高?

前几天,一个小伙伴告诉我,他在面试的时候被面试官问了这么一个问题:在for循环中,到底应该用 i++ 还是 ++i ?听到这,我感觉这面试官确实有点不按套路出牌了,放着好好的八股文不问,净...

Java知音 1085

文献综述三大痛点用AI轻松解决!借助Gemini 3 Pro搞定检索难、阅读慢、框架乱问题(附 AI 提示词)

4)“漏斗式”结构:先介绍宏观领域的研究现状,再缩小范围,聚焦于与你课题直接先关的子领域,深入探讨与你研究变量直接相关的文献, 指出前人没做过、没做全或结论有矛盾的地方,再顺势提出你的研究课题,这种结构逻辑最清晰,能直接引导读者发现你研究的必要性。想要有针对性的搜到相关文献,必须先把模糊的研究题目拆解成精准的检索语言,这个时候就需要建立一个关键词矩阵,如核心词、同义词、学术术语、上下位词,以及对应的英文表达。请围绕【我的研究主题/关键词】,检索近5年发表的高被引的中英文文献,优先选择顶刊综述/论文。

智能AI让学术科研更容易 277

i++和++i的效率差别

同时,为了保证前缀和后缀对递增/递减的语义的实现保持一致,设计上的一般原则是后缀式的实现以前缀式为基础,这样,后缀式往往多了一次函数调用,这也许也是一个需要考虑的效率因素,不过相比之下,就有点微乎其微了。因为前缀式可以返回对象的引用,而后缀式必须返回对象的值,所以导致了在大对象的时候产生了较大的复制开销,引起效率降低,因此会有劝告尽量使用前缀式,尽可能避免后缀式,除非从行为上真的需要后缀式。好了,优化的过火了,由于i,a,b三个变量没有被使用,所以干脆全都被优化了,结果成了一个什么都不做的空函数体。

qq_41237850的博客 412

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

++i与i++在效率上的细微差别

可能将原值用中间量存起来以待使用,下面看相关程序的汇编代码(使用。笔者能力有限,如有失误,请多多见谅😊。在一些特定的使用中,

2301_81836829的博客 380

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java里面for循环中i++与++i的区别

平时在使用for循环时,都是这样写的:for(int i=0; i<10; i++),用的 i++。然而今天看算法的时候,发现有的for循环是这样的:for(int i=0; i<10; ++i),用的 ++i。for循环中 i++ 和 ++i 有什么区别呢?

皮小智的博客 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

i++与++i的区别

1、赋值顺序不同 ++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。 因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。 形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。 代码示例: public static void main(String[] args) { // TODO Auto...

weixin_43873578的博客 891

Java中的i++和++i

今天看代码突然发现在for循环中,有人用i++,有人用++i,这两个有什么区别呢? 平常也没注意过,一般习惯写i++,就比如: for (int i = 0; i < 10; i++){ System.out.println(i); } java基础知识会告诉我们 i++ 是先赋值然后自加1,比如说: int a, i = 1; a = i++; 那么先把i的值赋值给a,然后i=...

u010741032的博客 306

基于for循环中i++与++i的思考(个人发现)

本文是一篇作者基于常用for循环中i++和++i的如何使用的思考,感兴趣的同学可以来看看。

顾得泉的博客 1709

C、C++中++i与i++的区别

C++中使用++i与i++两者的效率有何区别? i++ 表示先引用,后自增。 ++i 返回的是对象的引用(reference of object),而 i++ 返回的是对象的原值(origin of object,但非左值)。 ++i 先自增,后返回原对象的对象,没有产生任何临时对象;而 i++,先保存原对象,然后自增,最后返回该原对象的临时对象,需要创建和销毁对象。 对于C++内置类型,两者的效率差别不大;对于自定义的类而言,++i 的效率更高一些。 C语言中没有面向对象,两者的使用效率是一样的,只不

Steve Ellison 847

【CPU底层那些事(底层视角看i++ VS ++i)】

底层视角查看i++ 和 ++i谁更快? 1.例程1 1.1 编写两个函数进行对比 void func_1() { int i = 1; ++i; } void func_2() { int i = 1; i++; } 1.2 对应的底层汇编 func_1(): push rbp mov rbp,rsp mov DWORD PTR [rbp-0x4],0x1 add DWORD PTR [rbp-0x4],0x1 nop pop r

weixin_42536748的博客 1040

关于 前++ 和 后++ 的效率问题

  我在写这篇博客之前也是被一些文章所误导,认为 ++i 的效率比 i++ 的效率高,每次都是使用前置的 ++。虽然操作没错,但是在认识上有错误,所以我把自己错误认识的经历分享出来,希望能够对和我有同样错误的人一些帮助。 一、内置数据类型   对于计算机内置的数据类型,现在的编译器水平比较高,比如 ++i 和 i++ 没有任何的区别,我们可以通过查看汇编代码看出来。 C语言源代码如下:i++; ...

weixin_42795141的博客 688
上一篇: C语言排序算法
下一篇: 多重继承及虚继承中对象内存的分布
MacroCrazier
博客等级 码龄19年 39粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值