位运算的简单应用
功能 | 示例 | 位运算 |
---|---|---|
去掉最后一位 | (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)) |