搜索
bottom↓
回复: 29

一段c代码,大伙帮忙分析一下结果,想不出来是什么原因(已解决)

[复制链接]

出0入0汤圆

发表于 2023-11-14 14:58:23 | 显示全部楼层 |阅读模式
本帖最后由 zc3909 于 2023-11-14 15:32 编辑

keil和vs2017的结果b都是0,而不是1,为什么?
       char a = 0, ch,b;
        a = 2;
        ch = 'b';
        b = a & 2 != 0;
        if(b) printf("b = true");

ChatGPT和百度文心一言结果也都是1,为什么实际运行是0呢?

弄清楚了:
b = a & 2 != 0;
先执行 2 !=0 这个永远是1,
再执行 a & 1也就是检查最低位是否为1,如果为1 则b为1,否则为0

附上恶心的原题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2023-11-14 15:02:31 | 显示全部楼层
&与&& 是有区别的

出0入91汤圆

发表于 2023-11-14 15:02:44 | 显示全部楼层
2!=0  為假      a&0  永遠都是0

出0入0汤圆

 楼主| 发表于 2023-11-14 15:04:02 | 显示全部楼层
本帖最后由 zc3909 于 2023-11-14 15:38 编辑

&是按位与操作,优先权大于 !=

以上的判断是错的!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入475汤圆

发表于 2023-11-14 15:04:49 来自手机 | 显示全部楼层
这种让我们这些没学过语言的咋整? 如果不是为了考试或者招聘面试题,为啥不用括号括起来实现毫无异议的状态?这样谁都看的懂,免去了一切人为失误

出50入58汤圆

发表于 2023-11-14 15:05:12 | 显示全部楼层
ackyee 发表于 2023-11-14 15:02
2!=0  為假      a&0  永遠都是0
(引用自3楼)

2!=0应该为真啊

出0入0汤圆

 楼主| 发表于 2023-11-14 15:06:03 | 显示全部楼层
1a2b3c 发表于 2023-11-14 15:04
这种让我们这些没学过语言的咋整? 如果不是为了考试或者招聘面试题,为啥不用括号括起来实现毫无异议的状 ...
(引用自5楼)

你说对了,这是大一c语言的课后题,实际这么用除非跟自己过不去

出50入58汤圆

发表于 2023-11-14 15:07:11 | 显示全部楼层
zc3909 发表于 2023-11-14 15:04
&是按位与操作,优先权大于 !=
(引用自4楼)

我查到的都是!=优先级高于&

出50入58汤圆

发表于 2023-11-14 15:11:28 | 显示全部楼层
a & 2 != 0等价于2&1,位与结果就是0没错吧

出0入0汤圆

 楼主| 发表于 2023-11-14 15:11:58 | 显示全部楼层
鲜衣怒马 发表于 2023-11-14 15:07
我查到的都是!=优先级高于&
(引用自8楼)

无论先算哪个,也想不通为什么结果是0

出20入12汤圆

发表于 2023-11-14 15:20:06 | 显示全部楼层
zc3909 发表于 2023-11-14 15:11
无论先算哪个,也想不通为什么结果是0
(引用自10楼)

2 & 1 = 0b0000010 & 0b00000001 = 0

出0入91汤圆

发表于 2023-11-14 15:35:25 | 显示全部楼层
zc3909 发表于 2023-11-14 15:04
&是按位与操作,优先权大于 !=
(引用自4楼)

好吧 我眼拙了

出0入91汤圆

发表于 2023-11-14 15:37:29 | 显示全部楼层
對了  看到樓上的恍然大悟  你這個是按位與

按位與

按位 來算   2 是10   1是01   按位與結果就是0

出0入9汤圆

发表于 2023-11-14 15:52:45 | 显示全部楼层


这是NewBing给出的答案
看来ChatGPT4比3.5还是厉害了挺多的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2023-11-14 16:11:03 | 显示全部楼层
istars2005 发表于 2023-11-14 15:52
这是NewBing给出的答案
看来ChatGPT4比3.5还是厉害了挺多的
(引用自14楼)

我用的确实是3.5

出20入186汤圆

发表于 2023-11-14 16:11:37 | 显示全部楼层
我一般像这种情况我会打上括号,有时候容易迷糊

出200入2554汤圆

发表于 2023-11-14 16:27:00 | 显示全部楼层
还是代码写得少啊:

  dat16 & 0xFF == KEY_VALUE

多栽几次就长记性了

出0入18汤圆

发表于 2023-11-14 18:10:23 来自手机 | 显示全部楼层
zc3909 发表于 2023-11-14 15:04
&是按位与操作,优先权大于 !=

以上的判断是错的!!

(引用自4楼)

你那图怎么可能按位&操作优先级会大于!=? 你看成取地址操作了吧

出0入224汤圆

发表于 2023-11-14 18:49:30 | 显示全部楼层
本帖最后由 yyts 于 2023-11-14 18:50 编辑



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入18汤圆

发表于 2023-11-14 18:51:41 来自手机 | 显示全部楼层

文心一言就是垃圾

出0入224汤圆

发表于 2023-11-14 18:53:04 | 显示全部楼层

所以应该是1才对吗?

出0入0汤圆

发表于 2023-11-14 20:41:19 | 显示全部楼层
不加括号的,都是垃圾

出0入1209汤圆

发表于 2023-11-14 20:49:13 | 显示全部楼层
都是谭浩强害的,加个括号能死人么?

出0入4汤圆

发表于 2023-11-14 21:17:34 来自手机 | 显示全部楼层
就是平时习惯养成的,有些简单的问题找半天。

出0入18汤圆

发表于 2023-11-14 23:29:05 来自手机 | 显示全部楼层
kitten 发表于 2023-11-14 20:49
都是谭浩强害的,加个括号能死人么?
(引用自23楼)

是的,看上去是牛逼了,估计只有真正的高手这么干

出0入0汤圆

 楼主| 发表于 2023-11-15 07:08:20 来自手机 | 显示全部楼层
tang_qianfeng 发表于 2023-11-14 23:29
是的,看上去是牛逼了,估计只有真正的高手这么干
(引用自25楼)

真正的高手不会这么写,真正的高手写的程序小学生都能读懂,并且满篇注释

出0入0汤圆

发表于 2023-11-15 08:27:15 | 显示全部楼层
这种运算符优先级是必考的,然而对实际没啥用

出0入0汤圆

发表于 2023-11-15 09:56:11 | 显示全部楼层
精力不要用在这个上面

出0入29汤圆

发表于 2023-11-15 15:26:33 | 显示全部楼层
多打一个括号就搞定了,为啥一定相信记忆呢?而其还折腾半天
比如:for(i=0;  i<25+30; i++)
我都会写成: for(i=0;  i<(25+30);  i++)

出0入0汤圆

发表于 2023-11-16 14:52:29 | 显示全部楼层
我从来都不考虑优先级的问题,超2个数的运算全部加()
记不住那么多优先级
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 13:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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