简介
众所周知,在计算机中,任何对数的处理都会回归于对相应二进制数的处理。我们把这对应的二进制形式称为机器数(最高位储存符号,“0”是“+”,“1”是“-”),位运算可以对机器数直接进行一元操作(有一个被处理数)或二元操作(有两个)。在平时,位运算比部分正常运算略快;不过当问题本身涉及到对二进制数的转化与处理时,位运算更能发挥巨大的作用。
位运算符简介
左移运算符 <<
对于一个二进制数,我们使用左移操作,它包含被操作值和移位值,左移操作就是将该数每一位上的数向左移动移位值,如 0000 0000 0000 0011(3)向左移位 1 一位成为 0000 0000 0000 0110(6).
v<<s
上述代码展示了左移运算符的使用,v 是被操作的整数值,s 是移动位数。对于二进制数,我们知道每一位上等于右边一位的两倍。那么,左移一位即等于乘 2。那么 3 <<1 便等价于(1×2^1+1×2^0)×2=6。位移 n 位,以此类推,等于原值的 2^n 倍。
右移运算符 >>
v>>s
据左移运算符的功能类推可知,右移运算符即将每一位右移 n 位。位移后的值等于原值的 1 /2^n 倍。对于位移运算符,位移后腾出的位置用“0”填充,超出边界的值舍弃。
按位反运算符 ~
位反运算符将每一位转换为它的反面。
按位或运算符 |
对两个等长二进制整数值操作,若两个数的对应位中只要有一个及以上的“1”,结果新值中此位为“1”,其余情况此位则为“0”。
按位异或运算符 ^
对两个等长二进制整数值操作,若两个数的对应位中只有一个为“1”,新值相应位为“1”,而若都是“0”或“1”,相应位为“0”。
按位与运算符 &
对两个等长二进制整数值操作,若两个数的对应位中两个都是“1”,新值相应位为“1”,其余情况新值相应为皆为“0”.