程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理)。
取反
取反是一元运算符, 对一个二进制数的每一位执行逻辑反操作. 使数字1成为0, 0成为1。 例如二进制数 1001取反后为0110。
按位或
按位或处理两个长度相同的二进制数, 两个相应的二进位中只要有一个为1, 该位的结果值为1。例如1001,1101按位或后得到1101。
按位异或
按位异或运算, 操作的结果是两个等长二进制数如果对应位不同则该位为1, 否则该位为0. 例如1001,1101按位异或后得到0110。
按位与
按位与处理两个长度相同的二进制数, 两个相应的二进位都为1, 该位的结果值才为1,否则为0. 例如1001,1101按位与后得到1001。
移位
移位是一个二元运算符,用来将一个二进制数中的每一位全部都向一个方向移动指定位,溢出的部分将被舍弃,而空缺的部分填入一定的值。应用逻辑移位时,移位后空缺的部分全部填0.
1001右移2位:0010
1101左移2位:0100
对应的Java语言中的操作符
位运算 | Java运算符 |
按位非 | ~ |
按位与 | & |
按位或 | | |
按位异或 | ^ |
右移位 | >> |
右移,左边空出的位以0填充 | >>> |
左移为 | << |