送分题,快来看呀

Developerljm 2002-12-23 09:51:28
int x=1,y=1;
--x&&--y;
printf("%d,%d\n",x,y);

print:0,1.

各位大虾为什么,给个合理的解释,一定给分呀):
...全文
72 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
srm2000 2002-12-25
  • 打赏
  • 举报
回复
无聊
cxy007 2002-12-24
  • 打赏
  • 举报
回复
codeprimer(daka)
你没有错 你是对的
c++的编译器是用短路求值的,如果是||,为真的话后面就不算了。
正是这样,我们才可以写if(a>=0&&b[a]...)之类的语句而不用担心b数组出界。因为如果出界了,比如a为负,就不会算b[a]的值了。
midea 2002-12-24
  • 打赏
  • 举报
回复
呵呵,书上对这个问题讲得很清楚啊!
fly_hyp 2002-12-24
  • 打赏
  • 举报
回复
haha
fly_hyp 2002-12-24
  • 打赏
  • 举报
回复
真遗憾,还是来晚了
Riemann 2002-12-23
  • 打赏
  • 举报
回复
哎,来晚一步。
WHJWHY 2002-12-23
  • 打赏
  • 举报
回复
codeprimer(daka)
你没有错 你是对的
codeprimer 2002-12-23
  • 打赏
  • 举报
回复
Developerljm(飞车)

我不觉得我补充的有问题,我没有误导别人
:)

你上面的两位大哥也证明了我的观点,莫非我们三人都错了:)
Developerljm 2002-12-23
  • 打赏
  • 举报
回复
codeprimer(daka),这位补充的有问题吧):,去试试吧,把要这样误人吗,哈哈...
积木 2002-12-23
  • 打赏
  • 举报
回复
(--x)&&(--y)
首先你得对&&运算符有一定得了解,&&是只有位于左边得第一个运算对象为true时才会对第二个求值,你这个式子正好是这个条件得最好例子
--x得出的是false所以(--y)就不被执行了
相应的||这个运算符只是在第一个运算对象得到false才会对第二个运算对象求值
实际上还有一个“,”这个东西,一定是在第一个表达式求完以后才会对下一个运算对象求值(这个不管第一个的真假),这三个在处理上有一些共性
WHJWHY 2002-12-23
  • 打赏
  • 举报
回复
以上两位答的对 此为 运算符的“短路”问题
codeprimer 2002-12-23
  • 打赏
  • 举报
回复
up:)

补充:
同样的道理也在||操作府上有作用
一旦前面的那个表达式为真,后面的就不需要运算表达式了。

web_spider 2002-12-23
  • 打赏
  • 举报
回复
op1&&op2;
在c中,当op1为假(0)时,op2就不执行了。

--x&&--y;
首先执行--x;x变为0;也就不执行op2(--y)了,从而y不变。
leolance 2002-12-23
  • 打赏
  • 举报
回复
||里面一个为真就为真的吧。
Developerljm 2002-12-23
  • 打赏
  • 举报
回复
codeprimer(daka) 对不对试一下就知道了,更何况一个数不能决定 “||”的值呀,而“&&”到可以呀。
coolley 2002-12-23
  • 打赏
  • 举报
回复
哎呀,真遗憾,还是来晚了

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧