若有定义:int a=1,b=2,c=3;语句++a||++b&&++a运行后b 的值为()。
A.1 B.0 C.2 D.3
分析表达式`++a || ++b && ++a`:
1. `++a`:由于`++`是前缀形式,所以`a`的值会先增加1,然后表达式的结果为`a`的新值,即`2`。此时,`a`的值为`2`。
2. `||`运算符:由于逻辑或运算符`||`在第一个操作数为真(非零)时就会返回真,并且不会评估第二个操作数,因此`++b && ++a`这部分不会被执行
3. 由于`++a`的结果是`2`(一个真值),整个表达式`++a || ++b && ++a`的结果也是真,并且`b`的值在这个过程中没有被改变
++b是先自增再+1
根据逻辑运算符的短路特性,当遇到逻辑或运算符 `||` 时,如果左边的表达式为真(非零),则整个逻辑表达式的结果为真,右边的表达式不会被执行。只有当左边的表达式为假(零)时,才会继续执行右边的表达式。
同样地,当遇到逻辑与运算符 `&&` 时,如果左边的表达式为假(零),则整个逻辑表达式的结果为假,右边的表达式不会被执行。只有当左边的表达式为真(非零)时,才会继续执行右边的表达式。
在这个例子中,由于 `++a` 的结果为2,非零,所以整个逻辑表达式的结果为真。因此,右边的 `++b && ++a` 不会被执行。
综上所述,执行完 `++a || ++b && ++a` 后,变量 `b` 的值仍然为2。
&&(串联):左边值为0,则短路,右边直接不算。 ||(并联):左边值为1,短路,右边直接不算。
这条语句可以分成两部分来看:
++a:将变量a的值加1,得到2,然后返回2,因为是前置自增运算符,所以a的值也变成了2。
++b && ++a:先将变量b的值加1,得到3,然后将变量a的值加1,得到3,最后返回true(1),因为两个加号都是前置自增运算符,所以b和a的值都变成了3。
现在有了两个返回值,一个是2,一个是true(1),接下来会进行逻辑或(||)运算。根据逻辑或的短路规则,只有前面的表达式返回false(0)时,才会继续计算后面的表达式,否则后面的表达式会被跳过。而因为前面的表达式返回的是非零值(2),所以后面的表达式不会被计算。
因此,整个语句的返回值是2,且b的值没有变化,仍然是2。
答案是2,不是3 ++a||++b&&++a 按照运算符优先级,等价于: ++a||(++b&&++a) 因为++a的值为2,为真,所以整个表达式的值为真,||右边的表达式不再运算,即逻辑或短路,所以b的值还是原来的值,即2
b是2,答案错了,而且a的值也是2
admin 回复 习作飞羽: 已修正
答案应该是错的 是2
一蓑烟雨任平生 回复 saihara: 已修正
答案是错的,结果为2
一蓑烟雨任平生 回复 非加力: 已修正
是2吧
一蓑烟雨任平生 回复 HLY: 已修正
C
答案是2,不是3 ++...
用户登录可进行刷题及查看答案
登录后提交答案