`
yqin
  • 浏览: 57778 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于++i和i++与+运算的问题

 
阅读更多

      今天在辅导二级C语言上机时,有同学问我关于(i++)+(i++)+(i++)和(++i)+(++i)+(++i)的问题。这个问题一直是一个麻烦的问题。当时看了一下运行结果,再看看题一下子晕了,我连忙对同学说这个问题我回去好好考虑一下,还从学生那里把题目抄了一下。(真是汗颜啊!)中午吃饭的时候和同学讨论这题,JHH同学的一句话使我茅塞顿开,晚上来到实验室就开始琢磨这题,经过一番思考,终于有了一些眉目了,现将我的理解解释如下(如有不正确的地方请指正)

  

      当i=1时,(i++)+(i++)+(i++)三个++都是后缀形式,就相当于i+i+i后i自增三次,最后(i++)+(i++)+(i++)=3,i=4;

      当i=1时,(++i)+(++i)+(++i)三个++都是前缀形式,先进行前两个(++i)的运算,(++i)+(++i)运算第一个(++i)后i=2,运算第二个(++i)后i=3。(++i)+(++i)=3+3=6,(++i)+(++i)+(++i)变为6+(++i),此时i=3。++i是前缀形式所以在执行+运算符之前i要自加一变为4,6+4=10,最后(++i)+(++i)+(++i)=10;

      当i=1时,(i++)+(++i)+(i++)中有前缀形式的也有后缀形式的,先进行前缀形式的运算,所以首先运算((++i),运算后i=2,然后进行(i++)+(++i)的运算,此时i=2,(i++)+(++i)=2+2=4。(i++)+(++i)+(i++)变为4+(i++),由于i++是后缀形式的,所以先进行+运算4+(i++)=4+2=6,运算完后再运算(i++)两次,最后i=4,(i++)+(++i)+(i++)=6;

 

      总结:当i++和++i与+运算时,从左向右进行运算。当i++参与+运算时,取i自加1之前的值进行+运算。当++i参与+运算时,取i自加1之后的值进行+运算。 

         

 

1
1
分享到:
评论
3 楼 dch1287 2009-11-09  
你的总结是错误的哦
1. 表达式求职肯定从左往右(不存在先++i,然后+,然后i++之说)
2. (i++)的值是i之前的值,同时i增了1
3. (++i)的值是i之后的值,同时i增了1
2 楼 yqin 2009-11-08  
wocsok 写道
你再好好想想对劲儿么?   想不通用机器算下   

i++ 也好  ++i也好   有变化的是表达式的结果   但是i最后只与几个元素相加有关  比如  (i++)+(++i)+(++i)+(i++)这四个 你位置随便换 结果i就是5   ++i是在运算前i自加了一  i++是运算之后i自加一   

(i++)+(++i)+(i++)最后i的值为4,我昨天写成了3,不好意思。
1 楼 wocsok 2009-11-08  
你再好好想想对劲儿么?   想不通用机器算下   

i++ 也好  ++i也好   有变化的是表达式的结果   但是i最后只与几个元素相加有关  比如  (i++)+(++i)+(++i)+(i++)这四个 你位置随便换 结果i就是5   ++i是在运算前i自加了一  i++是运算之后i自加一   

相关推荐

    java基础,笔记03

    i i + i + i 3 i + ++i + i ; i i + ++i + i ; 5 i + ++i + ++i ; i i + ++i + ++i ; 6 i i +++ i; i i ++ + i; 3 i i i; i i i; 1 一个等号是赋值运算 整个表达式的值就是左边变量被赋的值 两个等号是比较运算 ...

    大数运算、单词统计、集合运算、几何运算、矩阵运算、日期运算

    C++实现大数运算、单词统计、集合运算、几何运算、矩阵运算、日期运算等 内涵任务图片,可对比使用此代码,共6个文件夹 #include<bits/stdc++.h> using namespace std; string fname="大数运算.txt"; //保证 do1...

    图的基本运算

    //图的顶点数和弧数 }ALGraph; int LocateVex(ALGraph G, string u)//返回顶点u在图中的位置 { for(int i=0; i; i++) if(G.vertices[i].data==u) return i; return -1; } void CreateUDG(ALGraph &...

    Java程序设计基础:自增自减运算符.pptx

    自增/自减运算符 目录 课程导入 掌握自增/自减运算符的计算 能够熟练使用自增/自减运算符 自增/自减运算符 基本规则: 作用:在对一个变量做加 1 或减 1 处理时,可以使用 ++ 或 --。...注意下面几个问题

    复变积分试卷第四版卷I的答案

    利用留数的运算规则得 Res[f(z),1]= (3分) 同理得 Res[f(z),-1]=1/4, Res[f(z),i]= Res[f(z),-i]=-1/4 故 I=0 (1分) 注:本题也可利用留数定理来计算。 3. 解答: f(z)= (1分) 在圆环域:1|z| 内 ,有 (4分) ...

    数据结构(Java)复习题

    1. 数据结构是一门研究非数值计算的程序设计问题中,数据元素的① 、数据信息在计算机中的② 以及一组相关的运算等的课程。 ① A.操作对象 B.计算方法 C.逻辑结构 D.数据映象 ② A.存储结构 B.关系 C...

    高精度运算.doc

    高精度运算代码 高精度乘法: 计算的位数: if lena mod 4<>0 then slena:=(lena div 4)+1 else slena:=lena div 4; if lenb mod 4<>0 then slenb:=(lenb div 4)+1 else slenb:=(lenb div 4); 1.四位一存,边存边删:...

    多项式的加减乘除四则运算

    temp.coefs[i]=coefs[i] + p.coefs[i] for(;i ;i++) temp.coefs[i]=coefs[i]; for(int j = 0;j ;j++) temp.exps[j] = j; temp.size=maxsize; return temp; } Polynomial Polynomial::operator -...

    java中字符串运算

    g.drawString("字符串s1的长度为:"+n1,5,70); g.drawString("字符串s2的前缀是否为we? "+s2.startsWith("we"),5,90); String s3[]={"door","apple","Applet","girl","boy"}; g.drawString("s3=door,apple,...i++)

    集合运算(c++代码)

    int i,j; for(i=0;i;i++) { for(j=i+1;j;j++) { if(A.data[i]==A.data[j]) { B.Insert(A.data[j],B.ListSize()); } } } } void Concatenate(SeqList& A, SeqList& B) //顺序表类SeqList的...

    C语言四则运算

    C语言四则运算简单程序if(a==0||c==0) { printf("输入错误,分母不为0!"); } if(op=='+'){y=b*c+d*a;x=a*c;} //四则运算 if(op=='-'){y=b*c-d*a,x=a*c;} if(op=='*'){y=b*d;x=a*c;} if(op=='/'){y=b/c;x=a...

    VBA中采用正则表达式的四则运算

    采用正则表达式的四则运算:在VBA环境中,如何使用正则表达式,将正则表达式应用到四则运算中的算是分解中。 Dim r1 As RegExp Dim m1 As Match Dim mc1 As MatchCollection Dim str As String Dim sstr As String ...

    基于i_p_i_q运算方式的双滤波谐波检测方法

    基于i_p_i_q运算方式的双滤波谐波检测方法及其数字滤波器的设计

    稀疏矩阵运算器

    int i,j; //该非零元的行和列 int v; //该非零元的值 }triple; typedef struct { triple data[maxsize]; //非零元三元组表,data[0]未用 int rpos[maxsize]; int m,n,t; //矩阵的行数,列数和非零元个数 }...

    Python不支持 i ++ 语法的原因解析

    在C / C ++ / Java之类的语言中,对整数变量进行自增或自减运算是标准的,可以分为前缀运算(++ i和–i)和后缀运算(i ++和i–), 每个都有细微的差异和不同的目的。 当这些语言的用户进入Python时,他们

    JAVA基础之java的移位运算

    “|”运算符和“&”运算符分别对变量a与b各个对应位的运算得到了变量c和变量d的值。对变量e和f的赋值说明了“^”运算符的功能。字符串数组binary 代表了0到15 对应的二进制的值。在本例中,数组各元素的排列顺序显示...

    C++课程设计 算数四则运算i系统.rar

    C++课程设计 算数四则运算测试系统

    复数的四则运算(a+bi)

    该程序是关于复数的四则运算,例如(a+bi)*(c+di),并输出对应的结果

    数据传送指令与算术逻辑运算和移位指令的使用

    一。 把数据、地址或立即数传送到寄存器、存储单元以及I/O端口,或从... 二 使用算术逻辑运算和移位指令,可以实现对二进制数据的加、减、乘、除等四则运算,与、或、非、异或等逻辑运算,以及移位运算和代码转换运算

    java复数四则运算-类的定义与对象.rar

    1. 编写一个类实现复数的运算。 复数类ComplexNumber的属性: m_dRealPart:实部,代表复数的实数部分。 m_dImaginPart:虚部,代表复数的虚数部分。 复数类ComplexNumber的方法: ComplexNumber():构造函数,...

Global site tag (gtag.js) - Google Analytics