java 位运算符有 & | ~ ^ << >> >>>
所有运算运算之前将参与运算的数转二进制,下面以int类型的 0, 1为例进行测试。int类型内存中占32bit,及2进制数总32位,部分为0的以简化保留8位。
int a = 0;
int b = 1;
public void testBitwise(){
// 0 二进制 00000000
// 1二进制 00000001
// & 相同位都为 1, 结果对应位为1,否则为0
int result1 = a & b; // --> 00000000 十进制 0
System.out.println(result1);
// | 相同位有1 结果结果对应位为1,否则为0
int result2 = a | b; // --> 00000001 十进制 1
System.out.println(result2);
// ^ 相同位不同结果位为1,否则为0
int result3 = a ^ b; // --> 00000001 十进制 1
System.out.println(result3);
// << num, 左移num位运算, 十进制中相当于运算参数乘 2^num
int result4 = b << 3; // --> 00001000 十进制下 8
System.out.println(result4);
// >> num, 右移num位运算, 十进制中相当于运算参数除 2^num 结果取整
int temp = 20; // -> 00010100
int result5 = temp >> 3; // --> 00000010 十进制下 2
System.out.println(result5);
// >>> num, 无符号右移num位运算, 无符号指不受符号位影响,高位补0
int result6 = temp >>> 3; // --> 00000010 十进制下 2
System.out.println(result6);
int temp2 = -20; // --> 11111111 11111111 11111111 11101011
int result7 = temp2 >>> 24; // --> 00000000 00000000 0000000 1111111 十进制下255
System.out.println(result7);
}
输出结果: