传统算法竞赛时,有时会用的位运算,常用 << 和 >> 运算
- **<<:**算术左移 -> 低位补 0
- **>>:**算术右移 -> 高位补 1
【注】:因为计算机中是用补码存放数字的,正数的补码与原码一致,故不必细说。
而负数的补码则是反码加一(或者是从右到左扫描,直到遇到的第一个1,此 1 不变,向左继续扫描每位 均取反。符号为不变)。且补码的补码即原码。
所以负数的左移右移比较复杂:
例如: -3 右移一位为 -2 -> 因为 -3 的原码为 10000011 -> 其补码(计算机中存储)为 11111101
-> 右移一位变成 11111110 -> 将其转换为原码为 10000010 -> 等于 -2
负数的左移同理(例如:-1 左移一位为 -2)。