常看到如下用法:
{
if ((attr >> 0 & 0x01) == 1) {
......

if ((attr >> 1 & 0x01) == 1) {
......
}
if ((attr >> 2 & 0x01) == 1) {
......
}
if ((attr >> 3 & 0x01) == 1) {
......
}
}
或者
attr=1,attr=2,attr=4,attr=8.....1024..
if ((x | attr) == x) {//attr}如何理解

解决方案 »

  1.   

    都是二进制,if ((attr >> n & 0x01) == 1) {
    从右面开始的第n+1位是不是1
    } attr=1,attr=2,attr=4,attr=8.....1024..
    if ((x | attr) == x)
    测试第N位是不是0
      

  2.   


    第一个好理解第n+1是否为0第二个:假设一个数转化为二进制是: xxx,(x | attr) == x  可以表示为(arr以4为例,即二进制:100):   xxx
    或 100
      =xxx--------可以知道:如果(x | attr) == x   满足: x的最后2位必须为0,急:arr=4  测试 x最后是否有2个0,arr=8 测试x最后是否有3个0 ……