首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"a && (b = 5/a)“不将"5/a”赋值给"b"?

为什么"a && (b = 5/a)“不将"5/a”赋值给"b"?
EN

Stack Overflow用户
提问于 2012-06-15 07:58:18
回答 4查看 174关注 0票数 4

a && (b = 5/a)是否将5/a赋值给b (对于非零a)?

我的朋友说它没有,但我不明白为什么它不会。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-15 07:59:31

你的朋友错了。对于非零a,语句a && (b = 5/a)会将值5/a赋给b

如果为a == 0,则条件运算将短路,赋值将不会发生。

票数 12
EN

Stack Overflow用户

发布于 2012-06-15 07:59:41

你的朋友错了。如果a求值为true,则必须对两端进行求值,因为&&必须对两端进行求值才能执行正确的操作。另一方面,||不会。当然,您可以很容易地自己测试这一点,只需执行代码并在条件语句之后检查b的值。

票数 4
EN

Stack Overflow用户

发布于 2012-06-15 08:04:38

在C语言中,如果从逻辑简化的角度来看,求值是有意义的,那么求值就会提前中断。

即:

代码语言:javascript
复制
if(a && (b=5/a))

如果a是零,那么从逻辑上讲,如果你忽略系统错误(即除以零),那么整个语句就是零/假,所以语句的其余部分将不会被计算(例如:“零和任何东西等于零”,那么当我们已经知道最终答案总是零的时候,为什么还要费心计算“和任何东西”部分呢)。

更好的解决方案是:

代码语言:javascript
复制
if(a) {
  b=5/a;
} else {
  b=0;
  printf("ERROR! Attempt to divide by zero would have happened here!");
if(a && b) {
  //Do stuff
}

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11042973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档