社区
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
可以有犇人解释下吗?
...全文
289
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/
C++
自加
自减
运算 a = a++ + ++a - ++a a = ++a * ++a - ++a
C++
中
的 .h 和 .cpp 详解
通俗解释:.h和.cpp差不多就像书和目录的关系吧,目录
中
对书
中
的章节和内容进行简单表示,真正的实现是在书里面的。 一般的数据,数据结构,接口,还有类的定义放在.h文件
中
,可以叫他们头文件,可以#include 到别的文件
中
。功能实现一般都放在具体的.cpp文件
中
,这样方便文件管理,节约时间,提高效率。 你完全可以把功能实现一并放在.h文件
中
,也可以#include一个.cpp文件到另一个源文件
中
...
【
C++
重载
操作
符与转换】自增
操作
符和
自减
操作
符
自增
操作
符(++)和
自减
操作
符(--)的重载是
C++
操作
符重载
中
的重要部分,它使得自定义类型的对象能够像内置类型一样使用自增和
自减
操作
。在重载这些
操作
符时,要注意前置和后置形式的区别、返回值类型、效率问题和异常安全性。自增和
自减
操作
符重载在迭代器类、模拟数值类型等场景
中
有广泛的应用。通过合理运用自增和
自减
操作
符重载,我们可以编写出更加简洁、高效和易于理解的代码。
OpenCV
中
对Mat矩阵加、减、乘、除、转置等
操作
的总结
1、矩阵乘 1) 矩阵乘A*B 是以数学运算
中
矩阵相乘的方式实现的,即Mat矩阵A和B被当做纯粹的矩阵做乘法运算,这就要求A的列数等于B的行数时,才能定义两个矩阵相乘。如A是m×n矩阵,B是n×p矩阵,它们的乘积AB是一个m×p矩阵。 例如: Mat A=Mat::ones(2,3,CV_32FC1); Mat B=Mat::ones(3,2,CV_32FC1); ... AB=A*B; 2) ...
【
C++
】使用 yaml-cpp 库
操作
YAML
配置文件有利于我们灵活配置工程,解决大量重复劳动,也方便调试。YAML 是一种人类可读的数据序列化格式,它使用缩进和特定的符号来表示数据结构。在本文
中
,我们将详细介绍如何在
C++
中
使用yaml-cpp库来解析和生成 YAML 格式的数据。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章