C语言自增自减运算
2017-03-29 14:45
253 查看
先从最简单的说起
a++和++a的区别
a++是先把数据放在temp空间,然后a的存储空间数再自加。而++a则相反。。。。
举例:
int a = 4;
a += (a++);
首先先执行括号里面的a++,a++是把数据先放在temp空间,然后a的存储空间数++。就是说等号的右边实际上是一个temp空间
而不是a这个变量,所以等号的右边此时还是4。但是等号的右边a已变成5了。答案为9
int a = 4;
a += (++a);
首先执行++a,此时a自加变成5,再执行+=,加起来就是10。
(a++)+= a;
这道题是错的,为什么呢?因为首先执行(a++)里面的内容,所以等号的左边也就是一个tmp,而不是a。temp = temp + a;
tmp不是变量,它可以被赋值吗。
a = 4;
(++a) += (a++);
这个是对的,为什么呢?因为++a放到了a中了。也就是5了。再执行a+=(a++);就是11了。
但是很多情况下编译器的不同,会搞死我们的。。。。。。。。
a = 3;
b = (a++)+(a++)+(a++)
在vc中,我自己没测试过的。。。看了别人的文章的,答案是9,显然的就是先执行+号,然后再自加。
可是我用linux编译的却不然,答案是12.显然是先自加再进行+号运算。
c = (++a)+(++a)+(++a)
又是有两种情况,一种呢,在linux和vc下是等于16.它是先执行第一个++。再执行第二个++。然后执行+号。此时第一个a和第二个a都已经变成5了,5+5等于10,然后存放在tmp空间里,后面的++a,就是等于6,10+6等于16. 有的编译器是直接全部自加完才进行+号,所以就是18.
现在把printf和自加自减结合起来
a = 3;
printf("%d%d%d\n", --a, a++, a--);
输出是:2 , 2, 3
因为printf表达式是从右到左执行的,所以先是执行a--,表达式还是等于3,a已变成2,再执行a++,此时表达式a++还是等于2,但是a自身变成3,最后执行--a,就是2
a = 3;
printf("%d%d%d%d\n", ++a,--a, a++, a--);
输出是:3 ,3, 2, 3
前三个不用说了,到了执行第四个++a前,此时a是2,执行完++变为3,自然的第第二个a变量也为3,那为什么第三个和第四个a没变呢,因为它是表达式啊(tmp空间),
而不是变量a。
a++和++a的区别
a++是先把数据放在temp空间,然后a的存储空间数再自加。而++a则相反。。。。
举例:
int a = 4;
a += (a++);
首先先执行括号里面的a++,a++是把数据先放在temp空间,然后a的存储空间数++。就是说等号的右边实际上是一个temp空间
而不是a这个变量,所以等号的右边此时还是4。但是等号的右边a已变成5了。答案为9
int a = 4;
a += (++a);
首先执行++a,此时a自加变成5,再执行+=,加起来就是10。
(a++)+= a;
这道题是错的,为什么呢?因为首先执行(a++)里面的内容,所以等号的左边也就是一个tmp,而不是a。temp = temp + a;
tmp不是变量,它可以被赋值吗。
a = 4;
(++a) += (a++);
这个是对的,为什么呢?因为++a放到了a中了。也就是5了。再执行a+=(a++);就是11了。
但是很多情况下编译器的不同,会搞死我们的。。。。。。。。
a = 3;
b = (a++)+(a++)+(a++)
在vc中,我自己没测试过的。。。看了别人的文章的,答案是9,显然的就是先执行+号,然后再自加。
可是我用linux编译的却不然,答案是12.显然是先自加再进行+号运算。
c = (++a)+(++a)+(++a)
又是有两种情况,一种呢,在linux和vc下是等于16.它是先执行第一个++。再执行第二个++。然后执行+号。此时第一个a和第二个a都已经变成5了,5+5等于10,然后存放在tmp空间里,后面的++a,就是等于6,10+6等于16. 有的编译器是直接全部自加完才进行+号,所以就是18.
现在把printf和自加自减结合起来
a = 3;
printf("%d%d%d\n", --a, a++, a--);
输出是:2 , 2, 3
因为printf表达式是从右到左执行的,所以先是执行a--,表达式还是等于3,a已变成2,再执行a++,此时表达式a++还是等于2,但是a自身变成3,最后执行--a,就是2
a = 3;
printf("%d%d%d%d\n", ++a,--a, a++, a--);
输出是:3 ,3, 2, 3
前三个不用说了,到了执行第四个++a前,此时a是2,执行完++变为3,自然的第第二个a变量也为3,那为什么第三个和第四个a没变呢,因为它是表达式啊(tmp空间),
而不是变量a。
相关文章推荐
- C语言异或运算
- C语言之运算与表达式(笔记六)
- [C语言] 64位运算
- C语言之关键字结构体共用体位运算
- c语言算术运算表达式与赋值运算表达式的类型转换规则
- Python模拟C语言的三目运算
- C语言逻辑运算短路
- C语言中 sizeof 运算的值是在编译时还是运行时确定?
- 【C语言】07-基本语句和运算
- 学好C语言的运算顺序与运算符
- C语言运算优先级
- c语言:编写一个简易计算器,打印菜单界面,实现加减乘除运算,可以退出菜单界面
- C语言的位运算在实际操作中用途(转载)
- 有关C语言中有符号/无符号数混合运算的小问题
- c语言的位和位段结构的运算
- C语言 双链表各种基本运算的算法
- 基于C语言的稀疏矩阵的压缩存储和运算
- C语言按位运算
- 关于C语言中指针运算以及参数入栈顺序的面试题
- 【C语言】07-基本语句和运算