注册 登录
编程论坛 C语言论坛

&&的运算,求解题思路

航崽爱吃汤圆 发布于 2022-08-08 22:21, 1193 次点击
只有本站会员才能查看附件,请 登录
8 回复
#2
航崽爱吃汤圆2022-08-08 22:22
就想知道a,b的值,以及你为什么求得a,b的值是这样
#3
apull2022-08-09 02:06
false
a=1,b=1;

其实就是a && b,&&从左往右结合当a为false时,不进行后面的运算,直接跳过,给出false的结果。

这个可以通过if (b++ && a++) 验证。
#4
chenyucheng2022-08-09 08:04
程序代码:
#include <stdio.h>
main()//main函数不能这样定义。返回值要设为int,即int main()。
{
    int a = 0, b = 1; //现在a是0,b是1。
    if(a++ && b++) //判断中a还是0,b还是1,直到判断后a和b才变化。
        
// ++放变量后面,是先返回当前值,再增加;放前面,是先增加,再返回增加后的值。
        
// 现在a是1,b是2
        printf("TRUE");
    else
        // 现在a是1,b是2
        printf("FALSE");
    printf("_OUT:a=%d,b=%d\n", a, b);
}

if执行之前,a是0,b是1;if判断当中,a还是0,b还是1;if判断后,a才变成1,b变成2。
++运算符放变量后面(如a++),是先返回当前值,再增加;放前面(如++a),是先增加,再返回增加后的值。
还有&&是“而且”的意思。
所以会输出:
FALSE_OUT:a=1,b=2

如果要在输出TRUE或FALSE后换行,要把相应的printf()语句的内容加上\n转义符。
如果在某个新的编译器报错(报错的是第2行 main() 这行),只需要把函数定义语句 main() 改成 int main() ,并且main函数的最后加入 return 0 ,即可。最好用int main() ,不能直接定义 main() 。

[此贴子已经被作者于2022-8-9 08:27编辑过]

#5
wang11112022-08-16 08:54
a++&&b++,这个如果是先值后运算打出的结果是,false,a=1,b=1.  a变成1是对的,b为什么没有给值后加1变成2?   如果要是循环语句是不是b就会加呢?  会的给解释下?谢谢

[此贴子已经被作者于2022-8-16 09:11编辑过]

#6
不会游泳的虾2022-08-16 13:53
&& 是双目逻辑与运算,意为同时都要满足。对于&&运算,两边的表达式只要有一个为假,结果就为假。左表达式 && 右表达式 运算时,如果左表达式为假,那么对于&&运算来说,最后的结果肯定都是假了,所以计算机就偷个懒, 后面的右表达式就不执行了,也就是平常讲的短路现象。
结合上面的代码,这句 if(a++ && b++) 这么分解:if(a && b) ,a++,b++ ; 因为 a=0,b=1; (a=0 && b=1) ==> 结果为假,同时 b++ 就未被执行到,所以这句执行完后,a++ 被执行了,所以此时a =1, b++未被执行,所以b的值未变 b = 1。
所以上面的代码最终输出:FALSE_OUT:a=1,b=1
上面4楼的答案是错误的。

[此贴子已经被作者于2022-8-16 14:00编辑过]

#7
chenyucheng2022-08-16 14:27
回复 6楼 不会游泳的虾
原来还可以这样……
(还有,我当时把“数字&&数字”理解成了“数字==数字”)
#8
ssl0022022-08-16 16:37
4楼正解
#9
不会游泳的虾2022-08-17 09:25
回复 7楼 chenyucheng
还有 ||  双目或运算也是有短路现象的, || 运算是只要其中一个为真,结果就为真,当 左表达式=1 || 右表达式=0 或 =1 时,|| 运算的结果都为真,所以此时右表达式也不被执行到。
1