c程序中输入: int a,b,c; a=b=c=1; ++a||++b&&++c; 执行后abc的值为什么是211,请给出解答

2024-11-15 16:27:24
推荐回答(4个)
回答1:

++a||++b&&++c是逻辑表达式,它的值只有“真”与“假”两种,常用“非零”和“零”来表示。++a||++b&&++c第一个逻辑操作符为||,它是“或”操作,就是说它两边的表达式只要有一边为“真”整个表达式的值就为真。而++a使a为2,这已为“真”了,所以整个表达式的值已经肯定为“真”了,||右边的表达式就不再执行了,所以才有了211的结果。这种现象常被称为逻辑表达式运算的“短路”现象,是C/C++提高执行时效的措施之一。

回答2:

a=b=c=1; 这句话是连续赋值,结果是a=1, b=1, c=1;
++a||++b&&++c; ||优先级低于&&,所以可以看成(++a)||(++b&&++c);先执行(++a),a=2,++a>0,为真,根据短路原则,后面的表达式不再计算,因为无论后面真假,表达式总为真,所以后面++b&&++c没有计算,结果就是abc为211

回答3:

逻辑表达式中,若有<条件1>&&<表达式2>,则先计算<条件1>的值,若其值为1(非0),就计算<表达式2>的值,根据表<达式2>的值来判断整个表达式的值是0还是1,但是如果表达式1的值为0的话,就不在计算表达式2的值,因为整个表达式已经可以判定为0了,无需在计算表达式2的值。
若有<条件1>||<条件2>,则先计算<条件1>的值,若其值为0,则通过<条件2>的值来判断整个表达式的值是0还是1。若<条件1>的值为真(非0),则不计算<条件2 >的值,因为此时可以判断整个表达式的值也为1。
所以,在下列表达式中:
++a||++b&&++c
由于++a的值为2(非0),所以此时可以判断整个表达式的值为真,不再需要执行后面的表达式了,所以,这个表达式只计算了++a的值,后面的并没有参与计算!
注:逻辑表达式中,是从左向右计算的!

回答4:

++a||++b&&++c,这句话运算顺序为从左到有。但是||运算如果他的左边为真(非0)则不再执行右边的表达式。是a执行的自加运算。而++b和++c都没有执行。