a && (b = 5/a)是否将5/a赋值给b (对于非零a)?
我的朋友说它没有,但我不明白为什么它不会。
发布于 2012-06-15 07:59:31
你的朋友错了。对于非零a,语句a && (b = 5/a)会将值5/a赋给b。
如果为a == 0,则条件运算将短路,赋值将不会发生。
发布于 2012-06-15 07:59:41
你的朋友错了。如果a求值为true,则必须对两端进行求值,因为&&必须对两端进行求值才能执行正确的操作。另一方面,||不会。当然,您可以很容易地自己测试这一点,只需执行代码并在条件语句之后检查b的值。
发布于 2012-06-15 08:04:38
在C语言中,如果从逻辑简化的角度来看,求值是有意义的,那么求值就会提前中断。
即:
if(a && (b=5/a))如果a是零,那么从逻辑上讲,如果你忽略系统错误(即除以零),那么整个语句就是零/假,所以语句的其余部分将不会被计算(例如:“零和任何东西等于零”,那么当我们已经知道最终答案总是零的时候,为什么还要费心计算“和任何东西”部分呢)。
更好的解决方案是:
if(a) {
b=5/a;
} else {
b=0;
printf("ERROR! Attempt to divide by zero would have happened here!");
if(a && b) {
//Do stuff
}祝好运!
https://stackoverflow.com/questions/11042973
复制相似问题