1.一元操作符
非运算
~ 是按位非运算,将操作数对应的二进制数的每一位(包括符号位)取反,即 1 变 0 , 0 变 1 。
注意:在内存中,数值都是以二进制补码形式保存的,所以在读出的时候,都会执行一步操作:补码变原码(符号位不变,剩余位取反 +1)。
代码示例:
package test;
public class Test {
public static void main(String[] args) {
int a = 10;
System.out.println("十进制数 10 的二进制表示为 : " + Integer.toBinaryString(a));
System.out.println("按位非运算后,内存中的结果为 : " + Integer.toBinaryString(~a));
System.out.println("从内存中读出的结果为 : " + ~a);
}
}
输出结果:
2.二元操作符
算术运算
- 如果 / 和 % 的两个操作数都是整数类型,则除数不能为 0;
- 若有一个或者两个都是浮点数,此时允许除数为 0 ,任何数除以 0 得到的结果都是无穷大(± Infinity),任何数对 0 求余,结果都是非数 NaN;
- % 的操作数允许是浮点数。
位运算
操作符 | 描述 | 示例 |
& | 按位与,两位同时为 1 才返回 1 | 00101010 & 00001111 = 00001010 |
| | 按位或,两位之中有一位为 1 就返回 1 | 00101010 | 00001111 = 00101111 |
^ | 按位异或,两位相同返回 0,不相同返回 1 | 00101010 ^ 00001111 = 00100101 |
<< | 左移,N<<S 表示将 N 左移 S 位,空位填 0 | 11111000<<1 = 11110000 |
>> |
右移,N>>S 表示将 N 右移 S 位, 若为正数,空位填 0;若为负数,空位填 1 |
11111000>>1 = 11111100 |
>>> | 无符号右移,无论正数还是负数,空位都填 0 | 11111000>>>1 = 01111100 |
逻辑运算
在逻辑运算中,为了提高运行效率,Java 提供了“短路运算”功能:
- 对于 && ,当第一个操作数为 false 时,结果必为 false,无需检查第二个操作数;
- 对于 || ,当第一个操作数为 true 时,结果必为 true,无需检查第二个操作数。