c语言if ( ~0 == a | ~(0x04)),这句话什么意思

文档上解释说判断a对应二进制的第三位是否为1,请指教应该怎么理解,我是((~0==a)或上(~(0x04)))这样分开求或,不知对不对呵呵,大家不用回答了。我想明白了,是... 文档上解释说判断a对应二进制的第三位是否为1,请指教应该怎么理解,我是((~0 == a) 或上( ~(0x04)))这样分开求或,不知对不对
呵呵,大家不用回答了。我想明白了,是运算符的优先级的问题。if判断语句里a | ~(0x04)这句判断a的第三位是否为1,为1这个值全为1,否则不全为1,~0是全为1的值,然后前后判断后面的值【a | ~(0x04)】是否全为1,若是,if判断条件成立,这样就通了
展开
 我来答
风若远去何人留
推荐于2017-09-15 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
这是一个判断语句,意思为,当括号内的表达式值为真,则执行,否则不执行。
括号内的逻辑表达式为
~0 == a | ~(0x04)
涉及到三个操作,~、==和|
1、 ~为位操作中的取反操作,即按位取反,如本来为0,则置为1,否则置为0。
于是
~0 = 0xff
~0x04= 0xfB

2、 |是按位或操作,只有两个操作数对应位上均为0,结果的该位上才为0,否则为1。
所以
a|~(0x04)也就是a|0xfb 除了第4位上(从低到高计数)结果的其它位上必然是1。
所以最终结果只有可能是0xff或者是0xfb, 具体取决于a的第4位。
如果a的第四位为0,那么结果为0xfb,否则结果为0xff。

3、 ==是逻辑判断操作,当两侧相等时,值为真,否则为假。
由于左边是0xff,右边是0xff或者0xfb, 于是当右侧为0xff时为真,否则为假。

4 综合以上,这句的含义就是,当a的第四位上为1,则执行判断。否则不执行判断。

5 根据这个结果,可以得到更简单的方式,即通过&操作的方式,将原判断表达式改为
if(a&0x04)
可以得到同样的效果。
jefferyang123
2013-08-09 · TA获得超过707个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:131万
展开全部
运算符位或 ‘ | ’ 的优先级低于比较运算符,但是题目的意思应该要表达的是 ~0==(a|~(0x04))
0x04的二进制表示为 0000 0100,取反后为1111 1011,该数与a相与,若a的二进制第三位是1,则结果为1111 1111,若a的第三位是0,则结果为1111 1011,然后与~0比较,因为~0的二进制表示为全1,所以整个语句的意思就是判断a对应二进制的第三位是否为1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是谁呢lq1990
2013-08-09 · 超过31用户采纳过TA的回答
知道答主
回答量:126
采纳率:0%
帮助的人:76万
展开全部
这样求就不对了, 因为它原本的表达意思是 ~0 == (a| ~(0x04))所以不能按照你的那样写
追问
非常感谢你的回答,我还有点不很清楚,==的优先级为7高于 | 的优先级为10 ,程序应该先执行==,即先判断~0==a?,请有时间详解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一路清晨503
2013-08-09 · TA获得超过228个赞
知道小有建树答主
回答量:413
采纳率:100%
帮助的人:254万
展开全部
不对的,应该先做a|~(0x04)运算的。。。
下面进行分析:
1:~(0x04)二进制表示就是11111011
2:a | ~(0x04)结果:如果a的第三位为1则结果第三位也为1。结果是1111 1111
如果a的第三位是0则结果第三位也是0,结果是1111 1011
3:~0 结果是1111 1111
4:~0 == a | ~(0x04)进行判断,结果参照第2步,就知道了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cqpcy
2013-08-09 · TA获得超过658个赞
知道小有建树答主
回答量:746
采纳率:66%
帮助的人:364万
展开全部
0x04二进制 0100
~0x04 1011
~0 1111
1011或上a 是否为 1111
即第三位是否为1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式