(n >> k)& 1 取出整数n在二进制表示下的第k位
n & ((1 << k)-1) 取出整数n在后k位二进制所代表的值

int main()
{
    int n = 31;
    cout<<(n & ((1 << 3) - 1))<<endl;    
    return 0;
//输出7 二进制表示 1 1 1 1 1取出后三位 0 0 1 1 1 == 7**
}
int main()
{
    int n = 31;
    cout<<(n & ((1 << 4) - 1))<<endl;    
    return 0;
//输出7 二进制表示 1 1 1 1 1取出后三位 0 1 1 1 1 == 15
}

n ^ (1 << k)将二进制的第k位取反

int main()
{
    int n = 31;
    cout<<(n^(1<<3))<<endl;    
    return 0;
//输出的是23 二进制表示:1 0 1 1 1 
}
int main()
{
    int n = 31;
    cout<<(n^(1<<4))<<endl;    
    return 0;
//输出的是15 二进制表示 0 1 1 1 1
}

n | (1 << k) 将n二进制的第k位赋值为1
n & (~(1 << k)) 将n二进制的第k位赋值为0

成对变换

int main()
{
    //如果n为偶数
    n ^= 1 == n+1;
    //如果n为奇数
    n ^= 1 == n;
    return 0;
}

lowbit运算

int main()
{
    cout<<(n & (~n))<<endl;//取出最低位的1

    for(int i = 31 ;i >= 0;i --)//取出最高位的1
    {
        if((n >> i) & 1)
            {
                cout<<i+1<<endl;
                break;
            } 
    }
}