逻辑或运算符的结果是 “真或假”
在C/C++中 0 表示假,非0表示真
所以我认为这道题的正确答案是 “不是A”,因为B C D都为真,都是对的
在我这边,编译器给出的结果是1
$ cat main.c
#include <stdio.h>
int main(void) {
int a = 0, b = 2;
b = --a || ++b;
printf("%d\n", b);
return 0;
}
$ ./main
1
$
应该是答案给错了
b=--a||++b // 表达式中优先级的顺序为 --/++ > || > =
// 因此可以看成是 b = ( --a || ++b ) ,--a = -1, 所以 ( --a || ++b )表达式为真(1), 所以b = 1, 首先,b=-1,没有造成短路,执行||后面的++b,然后b就从2变成3了 178 发表于 2021-5-24 10:17
首先,b=-1,没有造成短路,执行||后面的++b,然后b就从2变成3了
你这是Python的语法吧, 经典++ -- 哈哈{:5_104:}
栈中八个字节分别储存a和b
第7行: a-1
8行:与0比较发现不为真 继续(没短路
10 b+1
11 与0比较为真 ( --a || ++b ) 整体为真
130x1 移到寄存器
16 寄存器的值移到栈中b位置
最后弹出给a,b
我这个反编译答案是1
页:
[1]