鱼C论坛

 找回密码
 立即注册
查看: 3451|回复: 6

宏定义以及自增自减运算符

[复制链接]
发表于 2022-4-20 14:16:46 | 显示全部楼层 |阅读模式

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

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

x
设有下面宏定义:
#define MIN(xy) (x)>(y)?(x):(y)
#define T(x,y,r) x*r*y/4
则执行以下语句后,s1的值为3。s2 的值是28,为什么?
int a=1, b=3, c=5, s1, s2;
s1=MIN (a=b, b-a) ;
s2=T (a++, a*++b, a+b+c);



关于s2中的a++*a+b+c*a*++b/4

按理说应该是3*4+3+5*4*4/4=35,为什么答案是28?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-20 14:40:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-20 14:41:33 From FishC Mobile | 显示全部楼层

回帖奖励 +10 鱼币

程序运行不就是3和35吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-20 14:47:53 From FishC Mobile | 显示全部楼层
相信自己,答案是错的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-20 14:53:42 | 显示全部楼层
因为先算了s1,所以现在的值分别是:a=3、b=3、c=5
s2里面的运算符中自增优先级最高
a++*a+b+c*a*++b/4
等同于
(a++)* a+b+c * a*(++b)/4
= 3 * 3+4+5 * 3 * 4 / 4
=9+4+5*3
=28
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-20 14:54:59 | 显示全部楼层
另外#define MIN(xy),xy中间少了逗号吧
(x)>(y)?(x):(y)求得也是最大值,不应该是MIN而是MAX吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-20 20:13:17 | 显示全部楼层
s2=T (a++, a*++b, a+b+c);
int a=1, b=3, c=5, s1, s2;
你的宏定义要这样写
#define T(x,y,r)  (x)*(r)*(y)/4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 20:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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