社区
C++ 语言
帖子详情
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
可以有犇人解释下吗?
...全文
290
13
打赏
收藏
C++中的自加和自减操作,非常疑惑
每条算是最开始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 可以有犇人解释下吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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]
研究这个一点儿意义没有!
强烈同意~
C/
C++
自加
自减
运算
本文详细剖析了
C++
中
自加
(self-increment)和
自减
(self-decrement)运算符在复杂表达式
中
的行为,通过实例演示了如何理解它们的运算顺序和步骤,以及在诸如a=a+++++a和a=++a+++a+a++---a等复杂情况下的计算过程。
C++
中
的 .h 和 .cpp 详解
本文主要介绍了
C++
编程
中
.h和.cpp文件的使用。.h文件用于存放数据、数据结构、接口和类的定义,.cpp文件用于功能实现。还阐述了inline限定符的使用,以及非模板类型和模板类型在两个文件
中
的放置规则,帮助开发者更好地管理代码。
【
C++
重载
操作
符与转换】自增
操作
符和
自减
操作
符
本文围绕
C++
中
自增和
自减
操作
符展开。先介绍内置类型的
操作
及自定义类型的重载需求,接着阐述重载的基本语法、前置和后置形式区别与底层实现差异,还给出代码示例。同时强调重载时返回值类型、效率和异常安全等注意事项,最后说明其在迭代器类和模拟数值类型等场景的应用。
OpenCV
中
对Mat矩阵加、减、乘、除、转置等
操作
的总结
本文详细介绍了OpenCV
中
矩阵的基本运算,包括加、减、乘、除、转置、求逆、非零元素计数及均值标准差计算。通过实例展示了如何使用OpenCV进行矩阵
操作
,适用于图像处理和计算机视觉领域的开发者。
【
C++
】单目
操作
符详解:前置与后置自增
自减
及正负号
操作
本文聚焦
C++
中
的单目
操作
符,介绍了自增(++)、
自减
(--)、正号(+)和负号(-)四种常见单目
操作
符。详细阐述了自增
自减
操作
符前置和后置的区别及使用场景,还说明了正负号
操作
符在数值处理
中
的作用,有助于编写高效、清晰的代码。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章