位运算
(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;
}
}
}
查看7道真题和解析