作业帮 > 综合 > 作业

int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/19 02:09:11
int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值
int a=0,b=1,c=1,d;执行语句d=--a‖++b&&--c.求a,b,c,d的值
运行结果是:-1,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,
PS:楼主 这个是c语言啊. 这种事情对于所有的C 编译器(只要是有名的)都会优化成逻辑测试过程,以避免浪费时间.