列表
操作 | 描述 |
---|---|
| | 位或运算 |
& | 位与运算 |
~ | 按位补码 |
^ | 按位异或运算 |
<< | 左位移 |
>> | 右位移 |
>>> | 无符号右位移 |
例子
位或运算
位或运算是二元运算,通过|表示,通过比较两个操作数对应的位,如果对应的位有一个是1,那么就是1,如果不是,那么就是0。
public class Example {
public static void main(String[] args) {
int number1 = 4, number2 = 8, result;
result = number1 | number2;
System.out.println(result);
}
}
输出:12
00000100 = 4
00001000 = 8
------------
00001100 = 12
位与运算
位与运算是一个二元运算,通过&表示,通过比较两个操作数对应的位,如果对应的位都是1,那么是1,否则是0.
public class Example {
public static void main(String[] args) {
int number1 = 4, number2 = 8, result;
result = number1 & number2;
System.out.println(result);
}
}
输出:0
00000100 = 4
00001000 = 8
-----------------
00000000 = 0
按位补码
按位补码是一元运算,通过~表示,将位数为1 转为0,位数为0转为1.
4 = 00000100
4的按位补码:
~ 00000100
----------------
11111011 = 251
public class Example {
public static void main(String[] args) {
int number1 = 4, result;
result = ~number1;
System.out.println(result);
}
}
输出:-5
为什么输出是-5,而不是251呢
因为编译器会显示251的按照2的按位补码,然后二进制 前面加上负号
例如
数值 | 二进制 | 按照2的按位补码 |
---|---|---|
0 | 00000000 | -(11111111 + 1) = -00000000 = -0 |
1 | 00000001 | -(11111110 + 1) = -11111111 = -256 |
251 | 11111011 | -(00000100+1) = -00000101 |
按位异或
按位异或是二元运算,通过^表示,通过比较两个操作数对应的位,如果对应的位值不相同,那么是1,如果对应的位相同,那么是0。
public class Example {
public static void main(String[] args) {
int number1 = 4, number2 = 8, result;
result = number1^number2;
System.out.println(result);
}
}
输出:12
00000100 = 4
00001000 = 8
-----------------
00001100 = 12
左位移
<<运算符是左移特定的位数,用0补充到低位。
public class Example {
public static void main(String[] args) {
int number1 = 4, result1, result2;
result1 = number1<<1;
result2 = number1<<2;
System.out.println("result1:" + result1);
System.out.println("result2:" + result2);
}
}
输出:8
输出:16
操作 | 值 |
---|---|
00000100 << 1 | 00001000 |
00001000<<2 | 00100000 |
右位移
右位移运算是右移特定的位数
public class Example {
public static void main(String[] args) {
int number1 = 4, result1, result2,result3;
result1 = number1>>1;
result2 = number1>>2;
result3 = number1>>3;
System.out.println("result1:" + result1);
System.out.println("result2:" + result2);
System.out.println("result3:" + result3);
}
}
输出:2
输出:1
输出:0
无符号右位移
无符号右位移运算是右移特定的位数,用0补充左边的位值。
public class Example {
public static void main(String[] args) {
int number1 = 5, number2 = -5;
System.out.println(number1 >> 1);
System.out.println(number1 >>> 1);
System.out.println(number2 >> 1);
System.out.println(number2 >>> 1);
}
}
输出:2
输出:2
输出:-3
输出:2147483645