287187056 发表于 2021-5-16 20:38:28

人造人 发表于 2021-5-16 20:38:29

是这道题本身就有问题,我感觉这道题的答案是 “不是A”
逻辑或运算符的结果是 “真或假”
在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
$

1055741510 发表于 2021-5-23 17:43:02

应该是答案给错了
b=--a||++b // 表达式中优先级的顺序为 --/++ > || > =
                  // 因此可以看成是 b = ( --a || ++b ) ,--a = -1, 所以 ( --a || ++b )表达式为真(1), 所以b = 1,

178 发表于 2021-5-24 10:17:08

首先,b=-1,没有造成短路,执行||后面的++b,然后b就从2变成3了

奶茶newfish 发表于 2021-5-24 11:08:43

178 发表于 2021-5-24 10:17
首先,b=-1,没有造成短路,执行||后面的++b,然后b就从2变成3了

你这是Python的语法吧,

万千只cnm 发表于 2021-5-24 14:17:57

经典++ -- 哈哈{:5_104:}

栈中八个字节分别储存a和b
第7行: a-1
8行:与0比较发现不为真 继续(没短路
10 b+1
11 与0比较为真   ( --a || ++b ) 整体为真
130x1 移到寄存器
16 寄存器的值移到栈中b位置   
最后弹出给a,b
我这个反编译答案是1


287187056 发表于 2021-6-10 13:53:10

页: [1]
查看完整版本: 考试有道题感觉答案给错了,问问大家