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判断条件成立,这样就通了 展开
呵呵,大家不用回答了。我想明白了,是运算符的优先级的问题。if判断语句里a | ~(0x04)这句判断a的第三位是否为1,为1这个值全为1,否则不全为1,~0是全为1的值,然后前后判断后面的值【a | ~(0x04)】是否全为1,若是,if判断条件成立,这样就通了 展开
8个回答
展开全部
这是一个判断语句,意思为,当括号内的表达式值为真,则执行,否则不执行。
括号内的逻辑表达式为
~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)
可以得到同样的效果。
括号内的逻辑表达式为
~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)
可以得到同样的效果。
展开全部
运算符位或 ‘ | ’ 的优先级低于比较运算符,但是题目的意思应该要表达的是 ~0==(a|~(0x04))
0x04的二进制表示为 0000 0100,取反后为1111 1011,该数与a相与,若a的二进制第三位是1,则结果为1111 1111,若a的第三位是0,则结果为1111 1011,然后与~0比较,因为~0的二进制表示为全1,所以整个语句的意思就是判断a对应二进制的第三位是否为1
0x04的二进制表示为 0000 0100,取反后为1111 1011,该数与a相与,若a的二进制第三位是1,则结果为1111 1111,若a的第三位是0,则结果为1111 1011,然后与~0比较,因为~0的二进制表示为全1,所以整个语句的意思就是判断a对应二进制的第三位是否为1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样求就不对了, 因为它原本的表达意思是 ~0 == (a| ~(0x04))所以不能按照你的那样写
追问
非常感谢你的回答,我还有点不很清楚,==的优先级为7高于 | 的优先级为10 ,程序应该先执行==,即先判断~0==a?,请有时间详解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不对的,应该先做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步,就知道了
下面进行分析:
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步,就知道了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
0x04二进制 0100
~0x04 1011
~0 1111
1011或上a 是否为 1111
即第三位是否为1
~0x04 1011
~0 1111
1011或上a 是否为 1111
即第三位是否为1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询