C++中的自加和自减操作,非常疑惑

lynnwann 2008-11-19 12:10:35
每条算是最开始a=5;
b=(++a)*(++a)=49
b=(++a)*(a++)=36
b=(++a)*(--a)=25
b=(++a)*(a--)=36
b=(++a)*(++a)*(++a)*(++a)*(++a)*(++a)=388080

可以有犇人解释下吗?
...全文
289 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnnbjwq 2009-03-08
  • 打赏
  • 举报
回复
++i,在使用i之前先使i加1,i++,在使用i之后使i加1
BaihowFF 2008-11-19
  • 打赏
  • 举报
回复
不要将加加用于一个长表达式...依赖编译器...
而且写那么长...谁想看啊...
朵丽儿医娘 2008-11-19
  • 打赏
  • 举报
回复
前++,值先变,然后参与表达式计算,后++,原来的值先参与表达式计算,然后本身值加1.
lq651659889 2008-11-19
  • 打赏
  • 举报
回复
study
太乙 2008-11-19
  • 打赏
  • 举报
回复
依赖于编译器的实现!

可以自己看看汇编代码!

ps:研究这个一点儿意义没有!

只需要知道前家家和侯佳佳的区别就行!
霍大脚 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 leboc 的回复:]
引用 1 楼 hqin6 的回复:
依赖于编译器的实现!

可以自己看看汇编代码!

ps:研究这个一点儿意义没有!

只需要知道前家家和侯佳佳的区别就行!



研究这个一点儿意义没有!
强烈同意~
[/Quote]
同意
lemonrong 2008-11-19
  • 打赏
  • 举报
回复
这个跟编译器有关
herman~~ 2008-11-19
  • 打赏
  • 举报
回复
同意 1楼的

lz 记住 标准CPP 前置加减 和 后置加减的区别就OK
Claude 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 pepco 的帖子:]
每条算是最开始a=5;
b=(++a)*(++a)=49
b=(++a)*(a++)=36
b=(++a)*(--a)=25
b=(++a)*(a--)=36
b=(++a)*(++a)*(++a)*(++a)*(++a)*(++a)=388080

可以有犇人解释下吗?
[/Quote]
b=7*7=49
b=6*6=36
b=5*5=25
b=6*6=36
b=11*11*11*11*11*11
a首先进行单目运算,然后在进行算数运算,与编译器有关系……
liyudefly 2008-11-19
  • 打赏
  • 举报
回复
根据优先级别,先计算括号里的,故总是先计算自加或自减,如第二个b=(++a)*(a++)=36 ,先计算++a,这时a变成了6,++a这个表达式值也是6,再计算a++,由于是后加,故a++参与运算的值不变,还是6,所以结果为36,只是这语句执行后a变成7。前四个其它都同理,因为他们修改的都是a,它只有一块内存,因此只要一改变a的值就改变了所有的参与运算的a的值。但个人认为这里有VC6.0的不足之处,当这样的式子超过3个时,如最后一个,VC6.0会首先计算前两个,再一个个和后面的计算,像最后一个就是7*7*8*9*10*11=388080,这违背了C语言的语法规则,改变了优先级别,不过在VS2008下VC编译结果就正常了,它会给出11^6的值这个答案。同上面几楼,这东西可以讨论下,但没有深入研究的意义。
就呆在云上 2008-11-19
  • 打赏
  • 举报
回复
这里我就之说前面两个了,后面类似:
b=(++a)*(++a)=49 

a本身是5
算一个++a后a是6,算第二个++a,a成了7
但是在系统里面就只有一个a,也就是现在的a都是7
因此就就是49了
这个:
b=(++a)*(a++)=36 

a是5,不管从左往右还是从右往左,结构都是一样的
从左往右:
后缀自减不影响表达式本身,我们不看,++a以后a成了6,两个a同步就是6×6=36
从右往左一样
Qlaiaqu 2008-11-19
  • 打赏
  • 举报
回复
为什么研究这个没有意义了?
++i一般是编译成
******
i = i+1;
*****
i++一般是编译成
*****
int j = i+1;
******
i = j;
*****
至于那些**代表的代码是如何的安排执行顺序是根据编译器来决定的,写这样的代码就没有了可移植性,而且标准c中就明确无法预测这些表达式的结果而采取不规定的态度,所以,研究其中到底是怎么执行的跟本没有意义。如果有什么人出这样的问题给你,那只能讲那个人没有一点常识,在c上你应该远离他。
leboc 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hqin6 的回复:]
依赖于编译器的实现!

可以自己看看汇编代码!

ps:研究这个一点儿意义没有!

只需要知道前家家和侯佳佳的区别就行!
[/Quote]


研究这个一点儿意义没有!
强烈同意~

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧