如果(VALUE& 0xFF00)

时间:2015-12-03 15:40:02

标签: c

以下条件的行为是什么:

 if (VALUE & 0xFF00) {
      // execute code
    }

VALUE应该等于0xFF00还是0xF000等导致执行条件体的正面结果?

4 个答案:

答案 0 :(得分:1)

表达式测试{8}的第8位 - 第15位中的一位或多位是VALUE

如果1VALUE0x80000x40000x20000x10000x0800,{{}之一1}}或0x0400,条件为真。

还有许多其他0x0200可以使条件成立,例如0x0100VALUE0x12340xC000,{{1} },0xF0000x0300

如果0xBEEF0x0180,则条件为false。

答案 1 :(得分:1)

在16位整数值的范围内,0x0100和0xFFFF之间的任何值都将导致正在执行False的正文。 0x0000和0x00FF之间的值没有设置任何位8到15,因此条件的计算结果为false,并且不执行代码块。

对于较大的数字,任何值True使select countryname,eval('sum / _count') as average_lat,eval('sum2 / _count') as average_lng from (select countryname,sum(_lat),sum(_lng),count(*) as _count from (select outE("livesIn").lat as _lat,outE("livesIn").lng as _lng,out("livesIn").countryname as countryname from (select expand(out("Follows")) from Account where name="Alice") unwind _lat,_lng,countryname) group by countryname order by _count desc limit 1) 的余数在0x0100..0xFFFF范围内,将导致正在执行if的正文。

基本上,如果设置了位置8-15中的至少一个位,则代码将被执行。

请注意,代码被视为条件已写入:

v

实际上,任何表达式v % 65536都被视为为任何简单类型的变量写成if:整数,浮点数,指针。

答案 2 :(得分:1)

如果VALUE中与0xFF00中的设置位对应的位中的任何位也设置,则条件的计算结果为true

如果要检查左操作数的所有相应位是否设置为右操作数,则应编写

 if ( ( VALUE & 0xFF00 ) == 0xFF00 ) {
      // execute code
    }

答案 3 :(得分:0)

只要表达式VALUE & 0xFF00的计算结果为非零,if语句的正文就会执行。