短路求值
短路求值#include <stdio.h>
int main()
{
int a=3,b=3;
(a=0)&&(b=5);
printf(" a= %d,b= %d\n",a,b);
(a=1)||(b=5);
printf(" a= %d,b= %d",a,b);
}
如果上面为真,下面的b为什么会等于上面的b=5 本帖最后由 jackz007 于 2020-12-24 23:06 编辑
你这是赋值
(a = 0) && (b = 5)
逻辑不表达式是这样
(a == 0) && (b == 5) 编译器不同,输出也会不同的。我的VS2015输出:
a = 0, b = 3
a = 1, b = 3 jackz007 发表于 2020-12-24 23:05
你这是赋值
逻辑不表达式是这样
小甲鱼是等号 jackz007 发表于 2020-12-24 23:05
你这是赋值
逻辑不表达式是这样
横等的话结果又不一样了 为真直接a=3,b=3了 本帖最后由 jackz007 于 2020-12-25 00:00 编辑
(a=0)&&(b=5);
逻辑表达式都是以追求表达式的值真为终极目标,根据短路逻辑,&& 两侧表达式的逻辑值必须同为真才能判断整个表达式的值为真。&& 操作是先执行左侧的表达式,并进行逻辑判断,只有在结果为真的情况下,才会继续执行右侧的表达式并进行逻辑判断,如果右边的逻辑值也同为真,才可以判定整个表达式的值为真;反之,如果左侧是逻辑假,就可以断定整个表达式的值一定是假,就不再需要继续执行右侧的表达式和判断了。现在,(a=0) 这个表达式的值为 0,其逻辑值为假,所以,右边的表达式就不会被执行了。
(a=1)||(b=5);
同样还是根据短路逻辑,|| 两侧的表达式只要有一侧的逻辑值为真,则整个表达式的值即为真,|| 操作也是先执行左侧的表达式,并进行逻辑判断,只有结果为假的情况下才需要继续执行 || 右侧的表达式并进行逻辑判断,如果右侧的值为真,也可以判断整个表达式的值为真;反之,如果左侧为逻辑真,就可以断定整个表达式的值一定为真,就再不需要继续执行右侧的表达式和判断了。现在,(a=1) 这个表达式的值是 1,其逻辑值为真,所以,右边的表达式自然不会执行。
所以,在上述的两个表达式中,a 均被赋值,b 均未被赋值。 这个最终结果应该是a=1,b=3吧 废物弟弟云小舟 发表于 2021-1-17 09:39
这个最终结果应该是a=1,b=3吧
为什么是b=5咧?{:9_241:}
页:
[1]