a=1;+b=1+;+c=0+执行语句“d=--a+l‖+b--‖(c=b+3);+后,a、b、c
1个回答
关注
展开全部
咨询记录 · 回答于2023-12-30
a=1;+b=1+;+c=0+执行语句“d=--a+l‖+b--‖(c=b+3);+后,a、b、c、d的值分别为
亲,您好。
1. a=b=c=1;++a||++b&&++c;执行后输出a,b,c分别是:2 1 1。
2. ++a||++b&&++c;这个语句只会执行++a,++b&&++c不会执行。C语言在做||运算时,如果第一个操作数++a为真(非零),直接返回真,而不计算第二个操作数++b&&++c。运行结果是:-1,1,1。
楼上的,在式子中,--a || ++ b && --c; 这是一个布尔条件测试算式,只能是真(1)或假(0)。你可能认为如下是正确的:
布尔条件完整测试式子作如下运算:
&& 运算高于 || 运算,于是,测试 ++b && --c :
++b = 2, -- c = 0 --> b = 2, c = 0
2 && 0 逻辑运算为= 假 ( 0 )
再测试 --a || 0:
--a = -1, -1 || 0 = 真(1) , d = 真 (1)
于是最后结果是: -1, 2, 0, 1
但不是这样的!C 语言编译器优化了代码!所以实际上在测试这样的逻辑算式时,如果有类似 A || B 的式子,那么实际上只测试一个就可以认定结果为真了。就只测试A,一旦A 为真,就不再计算B 了。
所以,实际上的程序运行中的计算过程是:--a || ( ++b && --c ) 这个式子,最左边的 --a 先被计算,--a = -1,由于它右边是或的关系(||)而且a 不为 0,因此,程序不再计算,直接赋值给 d。b 和 c都不曾改变过。所以最终结果:-1, 1, 1, 1。
亲,以上就是我为您归纳整理 的答案,为您服务很开心,请给我个赞叭,非常谢谢您,希望我的回答对您有所帮助,然后希望您天天开心,生活愉快,好运常伴哦。