鱼C论坛

 找回密码
 立即注册
查看: 4099|回复: 4

C输出问题

[复制链接]
发表于 2012-12-11 20:33:41 | 显示全部楼层 |阅读模式
5鱼币
int x=2,y=2,=0,a;
a=++x||++y&&z++;
printf(:%d,%d,%d\n",x,y,z);
为什么输出不是3,3,1 而是3,2,0 求解释?

最佳答案

查看完整内容

不知到 楼主在学C(逻辑运算符)时 有没有接触到 短路 想象, 该题即是那个原理。 这么说吧, x的初始值为2,而++x之后表达式的值还是2(x的值为3),因为此刻表达式(++x)的值为真,所以“||”后面的其余因为短路,而不用运算!而这即与逻辑运算符“||”的运算规则(一真即真)相关!! 另外,这种短路现象在 逻辑运算符&&中也会出现。 举例: int x=0,=1; x++&&++y; printf(“%d,%d”x ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-12-11 20:33:42 | 显示全部楼层
不知到 楼主在学C(逻辑运算符)时 有没有接触到 短路 想象,
该题即是那个原理。
这么说吧, x的初始值为2,而++x之后表达式的值还是2(x的值为3),因为此刻表达式(++x)的值为真,所以“||”后面的其余因为短路,而不用运算!而这即与逻辑运算符“||”的运算规则(一真即真)相关!!
另外,这种短路现象在 逻辑运算符&&中也会出现。
举例:    int x=0,=1;
             x++&&++y;
             printf(“%d,%d”x,y)
结果,为 1 1,
因为在&&运算中,一假即假,表达式x++值为0(x为1),为假,所以后面的++y根据一假即假的短路原理无需再做运算!!!
不知道楼主理解了没有,很久没接触C了,没说清楚的话楼主莫喷啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-11 21:37:29 | 显示全部楼层
学习了,还真某想过这个问题!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-11 22:15:01 | 显示全部楼层

偶明白了,但“短路”是C之父提出,还是某个程序员提出的思想?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-12-11 22:21:34 | 显示全部楼层
绝影&瞬风 发表于 2012-12-11 22:15
偶明白了,但“短路”是C之父提出,还是某个程序员提出的思想?

这个  短路现象  其实就是逻辑 或(||)与逻辑(&&)本身的规则而已@
至于是谁提出来的,嘿嘿,没有考证过!
楼主加油哈!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-16 20:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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