Bob*_*bis 5 c logical-operators integer-arithmetic output
我正在做复习问题,问我"以下内容的输出是什么",我在理解这个功能方面遇到了一些麻烦:
int a = 1, b = 1, c = -1;
c = --a && b++;
printf("%d %d %d", a, b, c);
Run Code Online (Sandbox Code Playgroud)
输出是010.我的问题是关于第2行,c = --a && b++.如何处理此行,以及它如何工作/更改值?如果是的话c = --a || b++?从我的理解,我认为输出将是020.
Tri*_*und 12
理解结果的关键概念是布尔运算符的短路评估(&&和||) - 如果在评估布尔运算符的左侧后,右侧的值不能影响整体结果,那么不会被评估,它会产生任何副作用.
在第一种情况下,由于--a求值为0(= false),... && ...因此未评估第二部分,因为" false AND anything "将始终为false.具体来说,b++永远不会执行,因此其值仍保留1在输出中.
在的情况下--a || b++,整个表达式的值不能由左侧确定(" 假或什么 "仍然是真实的),因此b++ 被评价(和它的副作用,增加b,发生).
完全理解结果所需的另一个概念是前后增量/减量运算符之间的差异.如果--或++出现之前变量(如在--a),那么变量递减或递增第一和新值被用于评估整个表达式.如果变量(--或在变量之后)++出现,则变量b++的当前值用于计算表达式,并在发生变量后发生增量/减量.
应当指出的是,表达式,尝试两个或多个实例相结合的--/ ++ 同一个变量(如a++ + ++a)是很可能会调用未定义的行为 -结果可以通过平台,编译器,编译器和一天中的某些时间会有所不同.
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |