#include<stdio.h> void main() { int i=8; printf("%d\n",++i);// printf("%d\n",--i);// printf("%d\n",i++);// printf("%d\n",i--);// printf("%d\n",-i++);// printf("%d\n",-i--);// } 输出结果为 9 8 8 9 -8 -9 求分析
++i、--i和i++、i--的区别:
1、执行时间先后顺序不同。
++i 先执行i+1后执行程序 i++ 先执行程序后执行i+1 int i=8; printf("%d\n",++i),先执行加法所以打印出来的是9 printf("%d\n",--i)。
2、执行减法的先后程序不同。
先执行减法 打印出来是8 printf("%d\n",i++)。先执行程序 打印出来是8 打印结束后i为99printf("%d\n",i--)。
3、执行程序结果先后不同。
打印出来是9 打印结束后i为8 printf("%d\n",-i++),先执行程序 打印出来是-8 打印结束后i为9 printf("%d\n",-i--)。先执行程序 打印出来是-9 打印结束后i为8 }。
扩展资料
在同一条语句中,被操作的数出现多次是可以通过编译的,但是其在C++ Standard等语言标准中被定义为"Undefined behavior"(不确定的行为),即不同的编译器或编译器版本所编译得到的机器码可能不尽相同。
不在同一条语句中使被操作的数出现多次,这不仅仅将导致程序的含义难以理解,可读性大幅降低,同时可能导致不同的编译器或编译器版本得到不同的结果。
前置后置区别的举例: a = i++; 相当于 a = i; i++; a = ++i; 相当于 i++; a = i。
++i、--i和i++、i--的区别:
1、执行时间不同。
++ i先执行i +1,然后执行程序i ++先执行程序,然后执行i +1 int i = 8; printf(“%d \ n”,++ i)首先执行加法,因此打印输出为9 printf(“%d \ n”,-i)。
2、进行减法的顺序不同。
首先执行减法,打印输出为8 printf(“%d \ n”,i ++), 首先执行程序。 打印输出为8。打印完成后,i为99printf(“%d \ n”,i--)。
3、执行程序的结果不同。
打印后打印为9, 是8 printf(“%d \ n”,-i ++), 如果首先执行程序,则打印输出为-8。 打印完成后,i为9 printf(“%d \ n”,-i--)。 首先运行程序, 打印输出为-9,打印后,是8}。
扩展资料:
在同一条语句中,操作数可以被编译多次,但是在诸如C ++标准之类的语言标准中,操作数被定义为“未定义的行为”,即,不同的编译器或不同版本的计算机代码可能会有所不同。
不要使操作数在同一条语句中出现多次,这不仅会使程序的含义难以理解,大大降低了可读性,而且还可能导致不同的编译器或编译器版本获得不同的结果。
前置后置区别的举例: a = i++; 相当于 a = i; i++; a = ++i; 相当于 i++; a = i。
本回答被网友采纳i++和++i命令的区别有:
1、赋值顺序不同
++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。
因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。
形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
2、效率不同
比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中++i比i++效率要高些。一般来说在循环域里面,这两者并没有什么很大的区别,但是要注意其生存周期,以及i值在程序流中的变化。
3、 i++ 不能作为左值,而++i 可以。
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。
但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
比如:
int i = 0;
int *p1 = &(++i);//正确
int *p2 = &(i++);//错误
++i = 1;//正确
i++ = 1;//错误
扩展资料:
当i=5时,s=(++i)+(++i)和s=(i++)+(i++)的值:
1、当i=5时,s=(++i)+(++i)=13 先算第一个(++i),++在前面,就把i先加1再把赋值,即先把i变为6然后再得出(++i)的值为6,这时i已经变为6了,
再计算第二个(++i),++在前面也是先把i加1后再赋值,不过这时的i已经为6了,第一步的时候把i变成6了的,然后加1的话就变成7了,所以第二个(++i)的值为7,s=(++i)+(++i)=6+7=13。
2、s=(i++)+(i++)=11 先算第一个(i++),i在前面,就先赋值再把i加1,即(i++)的值为5,i的值变为6,第二个(i++),i在前面,先赋值再把i加1,这个时候的i已经为6了,即(i++)的值为6,而i已经变为7了。所以s=(i++)+(i++)=5+6=11。
参考资料来源:百度百科-自增自减运算符
参考资料来源:百度百科-++
++i、--i和i++、i--的区别理解
++i、--i和i++、i--的区别:1、执行时间先后顺序不同。++i 先执行i+1后执行程序 i++ 先执行程序后执行i+1 int i=8; printf("%d\\n",++i),先执行加法所以打印出来的是9 printf("%d\\n",--i)。2、执行减法的先后程序不同。先执行减法 打印出来是8 printf("%d\\n",i++)。先执行...
谁能详细的给我讲一下i++,++i,i--,--i的区别阿
1、运算符类型不同:i++使用的是后置自增运算符,++i使用的是前置自增运算符,i--使用的是后置自减运算符,--i使用的是前置自减运算符。递减操作符是“--”,意为“减少一个单位”;递增操作符是“++”,意为“增加一个单位”。2、运算规则不同:++i表示,i自增1后再参与其它运算;而i++...
java的 i++ ,++i ,i-- ,--i什么意思啊?
system.out.println(num);这时输出的Num=2。也就是说,i++是先赋值,后自增。而++i是先自增,后赋值。i--与i++一样。--i与++i一样。只是由加变成了减
c#中i++,++i,--i,i--,是什麽意思?如何计算?
从具体算法上来说,++i的效率高,i++的效率低。--同理。就是i = i - 1 符号在前的话,就是先进行--的运算,然后将运算的结果赋值给等号左侧的变量。--在后面就是,先将值赋给等号左侧的变量,然后进行i = i - 1的计算。如果单独拿出来,没有等号左侧的变量。i++;++i;计算结果没有差...
++i,--i,i++,i-- ?
i=5,单看i++和++i都是6 i--和--i也都是4,但是把这些放到运算式子中就不一样了,(1)i++和i--是先运算后++或--,(2)++i和--i是先++或--后运算,也就是说(1)中++和--没有用,用i=5算式子 但(2)中就要用6或4算式子
请问一下c语言中++i跟i++,以及——i跟i--的区别啊
++i以及i++和--i以及i--之间的区别原理是一致的,搞清楚一种就能理解另一种了。说一下前缀(++i)自增和后缀(i++)自增之间的区别:以例子来说:例子1:int i = 5 ;int b = 0 ;b = ++i ;例子2:int i= 5 ;int c = 0 ;c = i++ ;两个例子中,例子1里面 b = 6 , ...
C++ 中的 i++、++i、--i、i--、+=、-=、*=、\/= 这些如何理解?
在C++中,i++、++i、--i、i--、+=、-=、*=、\/= 这些运算符都是对变量进行操作的。下面是它们的详细解释:1. i++:这是后置自增运算符,表示先使用变量i的值,然后再将i的值加1。例如,如果i的初始值为5,那么表达式i++的结果就是5,然后i的值变为6。2. ++i:这是前置自增运算符...
C语言中i++,i--.++i,--i是什么意思
i++和++i都是i进行自加1,只不过前者是先调用i再自加,后者是先自加再调用i。例如:int i=1;int o=i++;\/\/ 先将i的值附给o,i再加1 int p=++i;\/\/先将i加1,再把i的值附给p o的值是0,而p的值是3 i--和--i与上边是一样的,只不过是自减运算 ...
i++,i--,++i,--i求详解
i++是先使用i的值进行计算,然后i再加1 ++j是先将j的值加1,然后再进行计算 p=(i++)+(i++)+(i++);=5+6+7 =18 此时i=8 q=(++j)+(++j)+(++j);=6+7+8 =21 此时j=8 所以输出为18,21,8,8
i++,i-- 和--i++i的不同
i++是先参加运算后加1,如x=i++相当于x=i;后运行i=i+1;i--是先参加运算后减1,如x=i--相当于x=i;后运行i=i-1;++i是先加1后运算,如x=++i相当于i=i+1;后x=i;--i是先减1后运算,如x=--i相当于i=i-1;后x=i;