运算符
符号 | 意义 |
---|---|
| | 按位或 |
|| | 逻辑或 |
& | 按位且(1&1=1,其他为0) |
&& | 逻辑与 |
~ | 按位取反 |
^ | 按位异或(相同是0 不同是1) |
! | 非 |
<< | 左移,补0,相当于乘以2(例:2<<3 = 8,乘以2的3次方的意思) |
>> | 右移,补符号位,相当于除以2(例:8>>3 = 1) |
>>> | 无符号右移,补0 |
(上面节选几个结合例题讲一下,比较容易混淆)
&运算符:
public static void main(String args[]) {
System.out.println( 13 ^ 17 );
}
两个数都转为二进制,然后从两个数的最高位进行与运算,两个都为真(1),结果才为真(1),否则为假(0)
13:01101
17:10001
13 & 17: 00001
00001转化为十进制,即1
&&运算符:
如果&&左边的表达式的值是false,右边的表达式会直接被短路掉,不会进行运算。
例如:在验证用户登录时盘判断用户名是不是 null 且不为空字符串,应当写为:
username != null && !username.equals("");
二者的顺序不能够交换,更不能用 & 运算,因为第一个条件不成立,根本不能进行字符串 equals() 的比较,否则就会报空指针异常。
| 和 || 运算符:
下面这道题输出的结果为:
这道题主要考的是"|“与”||"的区别。
用法:condition 1 | condition 2、condition 1 || condition 2
"|"是按位或:先判断条件1,不管条件1是否可以决定结果(这里决定结果为true),都会执行条件2
"||"是逻辑或:先判断条件1,如果条件1可以决定结果(这里决定结果为true),那么就不会执行条件2
//i=0, i<10为true,但是依然执行methodB(4),之后 j=4
b = i < 10| methodB(4);
//i=0, i<10位true,可以决定结果,所以不会执行methodB(8),j依然=4
b = i < 10|| methodB(8);
^ 运算符:
public static void main(String args[]) {
System.out.println( 14 ^ 3 );
}
两个数都转为二进制,然后从两个数的最高位进行与运算,两个相同是假(0),不同是真(1)
14:1110
3:0011
14 ^ 3:1101,
1101转化为十进制,即13