鱼C论坛

 找回密码
 立即注册
查看: 2395|回复: 15

自增自减运算符问题

[复制链接]
发表于 2021-8-28 21:35:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
void main()
{
        int i=5,j=5,p,q;
        p=(i++)+(i++)+(i++);
        q=(++j)+(++j)+(++j);
        printf("%d,%d,%d,%d\n",p,q,i,j);
}
为什么运算出来是15,22,8,8啊真的想不出为什么会有22?
麻烦了,大佬们。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-29 00:09:18 | 显示全部楼层
这类代码标准没有定义计算结果,不同的编译器很有可能会给出不一样的结果
讨论这样的代码是怎么算的 是没有意义的,这样的代码想怎么算就怎么算,就算是这样的代码输出的全部都是 0,也是完全可以的
如果要我来设计编译器,我就给这样的代码输出 0,这是完全没有问题的

因为确实不知道这样的代码应该先取值还是先 ++
所以,有的编译器先 ++,有的编译器先取值
这样的代码怎么算都可以,不算也可以,怎么都行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 00:12:11 | 显示全部楼层
在你看来,这样的代码应该先取值还是先 ++ ?
在我看来,直接输出 0,^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 02:08:30 | 显示全部楼层
int j = 5;
++j;    // 6
++j;    // 7
int a = j + j;  // a = 7 + 7
++j;    // 8
int q = a + j;  // q = 14 + 8
                //   = 22

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 09:34:17 | 显示全部楼层
也就是说不同的编译器运算方式不同,只要能推出答案是怎么运算就可以了,没有固定的算法,对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 09:39:59 | 显示全部楼层
鲁七七 发表于 2021-8-29 09:34
也就是说不同的编译器运算方式不同,只要能推出答案是怎么运算就可以了,没有固定的算法,对吗?

1. 你在你发的帖子下面回复别人,别人是收不到提示的,要点 ‘回复’ 按钮
2. 没有固定的算法
3. "只要能推出答案是怎么运算就可以了",推不出来的,你根本就不知道算法,怎么推?
这类问题直接跳过就可以了,或者直接记住答案不唯一就可以了,连推都不需要去推
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 09:45:18 | 显示全部楼层
人造人 发表于 2021-8-29 09:39
1. 你在你发的帖子下面回复别人,别人是收不到提示的,要点 ‘回复’ 按钮
2. 没有固定的算法
3. "只要 ...

谢谢大佬,懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 09:50:26 | 显示全部楼层
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 09:52:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 21:52:54 | 显示全部楼层

那个,大佬问你个问题
if (!strcmp(fa.name, ".") ll !strcmp(fa.name, ".."))
if (!strcmp(fa.name, ".") || !strcmp(fa.name, ".."))
这两个的区别哪里会导致计算错误啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 21:57:10 | 显示全部楼层
鲁七七 发表于 2021-8-29 21:52
那个,大佬问你个问题
if (!strcmp(fa.name, ".") ll !strcmp(fa.name, ".."))
if (!strcmp(fa.name, " ...

有两个字符不一样
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 23:11:53 | 显示全部楼层
人造人 发表于 2021-8-29 21:57
有两个字符不一样

那两个竖杠到底是什么啊
大写I也不是小写L也不是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 23:13:47 | 显示全部楼层
人造人 发表于 2021-8-29 21:57
有两个字符不一样

大佬晚安,明天再解决吧,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 23:42:59 | 显示全部楼层
鲁七七 发表于 2021-8-29 23:11
那两个竖杠到底是什么啊
大写I也不是小写L也不是

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-8-30 09:24:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-26 12:46:38 | 显示全部楼层
还真和编译器有关啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 09:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表