操作 |
效果(十进制) |
描述 |
备注 |
左移 |
✖️2 |
在末尾添加一位 0 |
⚠️有溢出风险 |
右移 |
将数字除以 2 并求整数商的操作 |
去除末尾的那一位 0 |
|
操作 |
符号 |
说明 |
左移 |
<< |
|
逻辑右移 |
>>> |
逻辑右移 1 位,左边补 0 即可 |
算术右移 |
>> |
保持符号位不变,除符号位之外的右移一位并补符号位 1。补的 1 仍然在符号位之后 |
举例
二进制 |
十进制 |
操作 |
结果(二进制) |
结果(十进制) |
110101 |
53 |
左移一位 |
1101010 |
106 |
110101 |
53 |
右移一位 |
11010 |
26 |
public static int leftShift(int num, int m) {
return num << m;
}
public static int rightShift(int num, int m) {
return num >>> m;
}
补码
- 出现原因:CPU 的运算器只实现了加法器,而没有实现减法器
- 有符号的二进制数,负数用补码标识
计算规则
正数
负数
- 反码 = 符号位不变,其他位取反
- 补码 = 反码 + 1
或、与、异或
逻辑值
位的“或”
- 定义: 参与操作的位中只要有一个位是 1,那么最终结果就是 1,也就是“真”。
位的“与”
- 定义: 参与操作的位中必须全都是 1,那么最终结果才是 1(真),否则就为 0(假)。
位的“异或”
- 定义: 具有排异性,也就是说如果参与操作的位相同,那么最终结果就为 0(假),否则为 1(真)。
- 可以判断两个变量是否相等
Java 符号说明