提醒
首先你要明确一点,所谓的位运算。是相对与二进制而言。如:3 ^ 2。就是 0011 和 0010 之间的计算。
^
位运算符
public class Hello{
public static void String(String str[]){
System.out.println(2 ^ 3);
}
}
// 输出 1
解释:前面我们提过位运算是针对二进制而言的。以下是 2、3 转换为二进制
2 -------> 0010
3 -------> 0011
生成 -- > 0001
^
位运算符计算原则,相同则结果为 0,不同则结果为 1
&
位运算符
public class Hello{
public static void String(String str[]){
System.out.println(2 & 4);
}
}
// 输出 0
解释:
2 -------> 0010
4 -------> 0100
生成 -- > 0000
&
位运算符计算原则,相同为都为 1,结果才为1,否则结果为0
|
位运算符
public class Hello{
public static void String(String str[]){
System.out.println(2 | 4);
}
}
// 输出 6
解释:
2 -------> 0010
4 -------> 0100
生成 -- > 0110
|
位运算符计算原则,两个位只要有一个为1,那么结果就是 1,否则就为 0
~
位运算符
public class Hello{
public static void String(String str[]){
System.out.println( ~ 4);
}
}
// 输出 -5
解释:
4 -------> 00000000000000000000100
生成 -- > 111111111111111111111111011
~
位运算符计算原则,如果位为0,结果是1,如果位为1,结果是0
需要注意的是:在 Java 中数字类型并不会占光所以的位,Java 会留出一位给负数使用。
如:int 的正数范围只会占用 31 位。而一个 32 位的 int 值,代表负数。其中111111111111111111111111111
为-1
。111111111111111111111111110
为-2
。依次类推。
>>
<<
>>>
位运算符
public class Hello{
public static void String(String str[]){
// Integer.toBinaryString() 方法会将 10 进制转换为 2 进制
System.out.println((4 >> 2) + " ---> " + Integer.toBinaryString(4 >> 2));
System.out.println((-4 >> 2) + "---> " + Integer.toBinaryString(-4 >> 2));
System.out.println((4 << 2) + " ---> " + Integer.toBinaryString(4 << 2));
System.out.println((-4 << 2) + " ---> " + Integer.toBinaryString(-4 << 2));
System.out.println((4 >>> 2) + " ---> " + java.lang.Integer.toBinaryString(4 >>> 2));
System.out.println((-4 >>> 2) + " ---> " + java.lang.Integer.toBinaryString(-4 >>> 2));
}
}
// 输出
// 1 ---> 0001
// -1 ---> 11111111111111111111111111111111
// 16 ---> 00010000
// -16 ---> 11111111111111111111111111110000
// 1 ---> 0001
// 1073741823 ---> 111111111111111111111111111111
解释:
4 -------> 0100
>>
位运算符计算原则,首先判断正负。如果是正数低位剔除,高位用 0 补齐。如:4 >> 2
:数字 4 整体向低位移动 2 位。100 转变为 001。如果是负数,低位剔除,高位用 1 补齐。
<<
向高位移动,低位用 0 补齐。
>>>
向低位移动,高位统一用 0 补齐。
网友评论