鱼C论坛

 找回密码
 立即注册
查看: 3801|回复: 6

[已解决]考试有道题感觉答案给错了,问问大家

[复制链接]
头像被屏蔽
发表于 2021-5-16 20:38:28 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-23 17:43:02 | 显示全部楼层
应该是答案给错了
b=--a||++b // 表达式中优先级的顺序为 --/++ > || > =
                  // 因此可以看成是 b = ( --a || ++b ) ,  --a = -1, 所以 ( --a || ++b )表达式为真(1), 所以b = 1,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-24 10:17:08 | 显示全部楼层
首先,b=-1,没有造成短路,执行||后面的++b,然后b就从2变成3了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你这是Python的语法吧,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-24 14:17:57 | 显示全部楼层
经典++ -- 哈哈

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


QQ截图20210524141044.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
 楼主| 发表于 2021-6-10 13:53:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 14:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表