Zhao70's Blog

位运算Part2

位运算的简单应用

功能 示例 位运算
去掉最后一位 (101101->10110) x >> 1
在最后加一个 0 (101101->1011010) x << 1
在最后加一个 1 (101101->1011011) x << 1+1
把最后一位变成 1 (101100->101101) x ¦ 1
把最后一位变成 0 (101101->101100) x ¦ 1-1
最后一位取反 (101101->101100) x ^ 1
把右数第 k 位变成 1 (101001->101101,k=3) x ¦ (1 << (k-1))
把右数第 k 位变成 0 (101101->101001,k=3) x & ! (1 <<(k-1))
右数第 k 位取反 (101001->101101,k=3) x ^ (1 << (k-1))
取末三位 (1101101->101) x & 7
取末 k 位 (1101101->1101,k=5) x & (1 << k-1)
取右数第 k 位 (1101101->1,k=4) x >> (k-1) & 1
把末 k 位变成 1 (101001->101111,k=4) x ¦ (1 << k-1)
末 k 位取反 (101001->100110,k=4) x ^ (1 << k-1)
把右边连续的 1 变成 0 (100101111->100100000) x & (x+1)
把右起第一个 0 变成 1 (100101111->100111111) x ¦ (x+1)
把右边连续的 0 变成 1 (11011000->11011111) x ¦ (x-1)
取右边连续的 1 (100101111->1111) (x ^ (x+1)) >> 1
去掉右起第一个 1 的左边 (100101000->1000) x & (x ^ (x-1))