秦疆的JavaSE课程笔记:29 基础 逻辑运算符 位运算符
- 逻辑运算符:
&&
与,||
或,!
非
public class Dome1 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a&&b:" + (a && b));
System.out.println("a||b:" + (a || b));
System.out.println("!(a&&b):"+(!(a && b)));
}
}
=========
输出:
a&&b:false
a||b:true
!(a&&b):true
与:两个变量为真,结果为真。
或:两个变量一个为真,结果为真。
非:真变假,假变真。
- 短路运算
public class Dome2 {
public static void main(String[] args) {
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println ("c="+(c));
System.out.println ("d="+(d));
}
}
=========
输出:
c=5
d=false
- 与运算判断为真的条件是变量皆为真,代码
boolean d = (c<4)&&(c++<4);
执行中,首先发现c<4
为假,则结果必为假,就不会执行后续代码c++<4
,也就没有执行c++
,所以输出c的值依旧是5
-
位运算符:
&
与,|
或,^
异或,~
非,>>
右移,<<
左移,>>>
无符号右移
A = 1100 0011
B = 0101 1010
A&B = 0101 0010
A|B = 1101 1011
A^B = 1001 1001
~A = 0011 1100 -
问,
2*8
怎么运算最快?
public class Dome3 {
public static void main(String[] args) {
System.out.println(2<<3);
}
}
=========
输出:
16
- 将十进制数用二进制表示:
1=0000 0001
2=0000 0010
3=0000 0011
4=0000 0100
注意2和4的二进制写法,相当于整个代码向左位移了1位。那么同理继续左移:
8=0000 1000
16=0001 0000
即16=2<<3。 >>
右移相当于除以二,<<
左移相当于乘以二。