本文目录一览

1,在c语言中的自增与自减怎么回事啊

在C语言中,自增是自身增加,例如:i++是i自身在运算后加1,自减是自身减,例如:i--是i自身在预算后减1.
i++ 等同于 i = i + 1;那(i+j) ++ 等同于 i + j = i + j + 1;么 i+j是一个表达式,不是一个变量。
i++,i--分别是先运算,然后再自加,自减++i,--i分别是先自加,自减,然后再运算
例,x=5,y=x++,y=5 x=5,y=x--,y=5 x=5,y=++x,y=6 x=5,y=--x,y=4

在c语言中的自增与自减怎么回事啊

2,C语言自增自减i和i的区别

自增、自减运算符。自增:i++,++i自减:i--,--ii++和++i的区别:当i++和++i单独一行时,两者的作用相同,都实现i=i+1;但不同之处在于i++先使用i的之后,再执行i=i+1,而++i是先执行i=i+1,在执行使用i的值。而 a = ++i,相当于 i=i+1; a = i;而 a = i++,相当于 a = i; i=i+1;例如:该代码执行结果a=2,b=1;#include<stdio.h>#include<math.h>int main (void)int a,b;int i=1,j=1;a=++i;b=j++;printf("%d %d.\n",a,b);return 0;}

C语言自增自减i和i的区别

3,谁和我讲下自增自减

自增就是++的概念。但自增也分为前自增和后自增。 比如有a = i++(i的初值为0),因为++是在i的后面, 所以i是属于后自增,后自增的概念是,先使用i的值, 在这里也就是先把i的值赋给a,然后i再加一。根据这 个概念,a的值为0,i的最后值为1。而如果是a = ++i; 因为++是在i的前面,那么i是前自增,也就是先自增, 再使用i的值,比如一开始i等于0,因为是前自增,所以 i的值先加一,然后再赋值给a,最后a的值为1。看看 上面的两个a的值不同。一个是0值,一个是1值。 自减也是一样,一样分为前自减和后自减。
健康最重要,日常养成好的习惯就可以了。 回答完毕,希望采纳!

谁和我讲下自增自减

4,C语言中的自增自减怎么算

自增,比如说变量s与i运行s=i++; 输出s,你将会看到s与之前的i值(未增)一样也就是说,i++是先将i的值赋予s,再将i的值+1s=++i;输出s,你将会看到s与i增加后一样也就是说,++i先将i的值+1,再赋值给s自减同理
++a , a=2 a, a=2 (a+a) =4 ++a , a=3 4+a = 7 --a, a=2 7+a = 9 a++, a=3 a=3,b=9
自增,i++即使用前每次加一;++i每次使用后加一自减i--,即每次使用前减一;--i每次使用后减一
自增自减道理是一样的,比如自增分为前缀和后缀,比如 int x=5; 你输出x++的值为5,而++x的值则为6,因为前缀是“先变后使用”,而后缀则是“先使用后变”,在赋值运算时能够看到他们的区别

5,C语言自增运算

++是自增运算符,++k或k++都是让变量k的值加1;- -是自减运算符,- -k或k- -都是让变量k减1。运算符位于操作数之前,称为前置运算符;运算符位于操作数之后,称为后置运算符。这两种运算符的差异是:前置运算符是对变量先递增(递减),然后参与其他运算,即先改变变量的值后使用;后置运算符则是变量先参与其他运算,后对变量递增(递减),即先使用后改变。比如:int a=9; b=a++;(b=9;a=10) b=++a;(b=10;a=10)对于你的这道题来说,++i和i++都是一样的;因为都是改变i的值。还有,printf("%d\n",sum)少写了一个“;”,应该是printf("%d\n",sum);希望对你有所帮助!
楼上你错了~~ 对自增的理解不对哦~ 第一个式子 a = 9;第二个式子 a = 3, b = 4 ,c = 5 , d = 3+4+5 = 12原理:自增运算中,++或者--在变量后面的话是要先进行运算的~ 所以第一个式子中先进行括号运算,在进行赋值运算,最后再完成自增运算,所以a=9, 而i=6; 第二个式子同理, i先赋值给变量后自增。 楼主不相信的话可以写个程序运行一下~。该好好复习一下谭浩强的c语言了~
i++是i被使用后再自增1,++i是i自增之后再被使用,把i++换成++i之后,该怎么样就怎么样啊,自己用编译器试试不就得了。。。

6,C语言的自增运算该怎么算

跟编译器有关, VC6结果为11,编译结果是这样:123456789101112131415161718 45: a=(++a)+(++a)+(++a)+(++a);0040109F mov eax,dword ptr [ebp-4]004010A2 add eax,1004010A5 mov dword ptr [ebp-4],eax //a=1004010A8 mov ecx,dword ptr [ebp-4]004010AB add ecx,1004010AE mov dword ptr [ebp-4],ecx //a=2004010B1 mov edx,dword ptr [ebp-4] //tmp =2004010B4 add edx,dword ptr [ebp-4] //tmp = 2+2 = 4004010B7 mov eax,dword ptr [ebp-4]004010BA add eax,1004010BD mov dword ptr [ebp-4],eax //a=3004010C0 add edx,dword ptr [ebp-4] //tmp = 4+3=7004010C3 mov ecx,dword ptr [ebp-4]004010C6 add ecx,1004010C9 mov dword ptr [ebp-4],ecx //a=4004010CC add edx,dword ptr [ebp-4] //tmp= 7+4=11004010CF mov dword ptr [ebp-4],edx //a=tmp=11 VS2008结果为16,编译如下:123456789101112131415161718 a=(++a)+(++a)+(++a)+(++a);004128CB mov eax,dword ptr [ebp-20h] 004128CE add eax,1 004128D1 mov dword ptr [ebp-20h],eax 004128D4 mov ecx,dword ptr [ebp-20h] 004128D7 add ecx,1 004128DA mov dword ptr [ebp-20h],ecx 004128DD mov edx,dword ptr [ebp-20h] 004128E0 add edx,1 004128E3 mov dword ptr [ebp-20h],edx 004128E6 mov eax,dword ptr [ebp-20h] 004128E9 add eax,1 004128EC mov dword ptr [ebp-20h],eax 004128EF mov ecx,dword ptr [ebp-20h] 004128F2 add ecx,dword ptr [ebp-20h] 004128F5 add ecx,dword ptr [ebp-20h] 004128F8 add ecx,dword ptr [ebp-20h] 004128FB mov dword ptr [ebp-20h],ecx 可以看出是先执行完所有的++a, 然后把4个a加起来。所以同一行代码里,最好不要出现同一个变量多次自增,结果不确定。
VC++6.0运行出来的确是11,反汇编代码如下面几位所给的,你估计也看不懂。这是一个有争议的代码,vs编译器和tc编译的结果又不一样,所以说这个只做下了解吧,二级C语言统考的时候应该不会出现这种题!
++a与--a是先加(减)再用a--与a++是先用后加(减)&&是如果前面运算为0后面就不运算||是如果前面运算为1后面就不运算a++与--a的运算都比&&(||)高 问题1:int a,b;a=b=1;++a || ++b ;a=?,b=?++a a就为2,所以b=1后面就不运算了#includevoid main() { int a,b; a=b=1; ++a||++b; printf("%d %d\n",a,b); } 问题二:int a,b;a=b=c=1;++a || ++b && ++c;a=?,b=?,c=?; ++a运算是a=2就正确了后面就不运算了所以b=1,c=1; #include void main() { int a,b,c; a=b=c=1; ++a||++b&&++c; printf("%d %d %d\n",a,b,c); }
估计和编译器有关吧VS2008是16吧 a =4+4+4+4 是以最终的a做了4次相加给你看下反汇编代码:int a = 0;004114DE mov dword ptr [a],0 a=(++a) + (++a) + (++a) + (++a);004114E5 mov eax,dword ptr [a] 004114E8 add eax,1 004114EB mov dword ptr [a],eax 004114EE mov ecx,dword ptr [a] 004114F1 add ecx,1 004114F4 mov dword ptr [a],ecx 004114F7 mov edx,dword ptr [a] 004114FA add edx,1 004114FD mov dword ptr [a],edx 00411500 mov eax,dword ptr [a] 00411503 add eax,1 00411506 mov dword ptr [a],eax 00411509 mov ecx,dword ptr [a] 0041150C add ecx,dword ptr [a] 0041150F add ecx,dword ptr [a] 00411512 add ecx,dword ptr [a] 00411515 mov dword ptr [a],ecx
结果是10。1 inta = 0; a 初始值为 0。1 (++a) + (++a) + (++a) + (++a); ++ (前置)出现在表达式中,会使受作用的变量自增1,再参与表达式的计算。不过,在同一语句中,多次访问同一个变量的情形,有可能被编译器优化。如果不考虑编译器优化的情形,即每次修改变量a的值时,a均是从内存中访问(而不是寄存器中访问),那么,由于C语言中的加法运算是左结合的,即从左边开始运算,所以,上式等价于:1 a = 1 + 2 + 3 + 4; 其结果是:1 10 以上分析在不同平台都实用,但不保证不同平台编译器编译后运行的结果一样。常见的编译器有Microsoft 的 C/C++ 编译器、Borland 的 C/C++编译器、GNU 的 GCC。
这个跟编译器处理有关,不同的编译器出来的结果是不一样的。我用vs2010出来的结果是16.

文章TAG:自增  在c语言中的自增与自减怎么回事啊  
下一篇