C++位运算

发布于 22 天前  2 次阅读


位运算符

运算符 含义
>> 右移
<< 左移
| 按位或
& 按位与
! 取反
^ 按位异或

性质与技巧

\交换两数
void swap(int &a,int &b)
{
    a = a^b;
    b = a^b;
    a = a^b;
}
  • 把右数第K位变成1

x|(1<<(k-1))

  • 把右数第K位变成0

x&~(1<<(k-1))

  • 右数第k位取反

x^(1<<(k-1))

  • 取末k位

x&(1<<k-1)

  • 取右数第k位

x>>(k-1)&1

  • 把末k位变成1

x|(1<<k-1)

  • 末k位取反

x^(1<<k-1)

  • 把右边连续的1变成0

x&(x+1)

  • 把右起第一个0变成1

x|(x+1)

  • 把右边连续的0变成1

x|(x-1)

  • 取右边连续的1

(x^(x+1))>>1

  • 去掉右起第一个1的左边

x&(x^(x-1))