public class Demo07 {
public static void main(String[] args) {
//逻辑运算符
//与:&& 或:|| 非:!
boolean a =true;
boolean b =false;
System.out.println("a && b:"+(a&&b)); //与运算:两个结果都为真结果才为true,否则为假
System.out.println("a || b:"+(a||b)); //或运算:只要一个为真结果就为true,否则为假
System.out.println("!(a && b):"+!(a&&b));//如果结果为真则变为假,反之为真
System.out.println("==============================");
//短路运算:与运算中,若第一个数就已经是假了,则不会再运行后面的,之间输出结果为false
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d); //结果为false
System.out.println(c); //结果为5,即只输出了(c<4)已经为false了
System.out.println("==============================");
//位运算符:&(与)、|(或)、^(非)、~(取反)
/*
A = 0011 1100
B = 0000 1101
A & B =0000 1100 (对位比较:相同位置的数都是1则为1,其他都是0)
A | B =0011 1101 (对位比较:相同位置的数都是0则为0,其他都是1)
A ^ B =0011 0001 (对位比较:相同位置的数都相同则为0,即都是0或都是1,不同则为1)
~ B =1111 0010 (对位比较:相同位置的数全部按位取反,即1变为0,0变为1)
*/
//<<:左移 >>:右移
/*例:
2*8=16 即2*2*2*2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
0001 0000 16
从2到16,向左移动了3个位
由此可知<<就是*2;>>就是/2
*/
System.out.println(2<<3); //结果为16,原理即是2*2*2*2
System.out.println("==============================");
//扩展赋值运算符:+=、-=、*=、/=
int m = 10;
int n = 20;
m += n; //即m=m+n;其余的同理
System.out.println(m); //结果为30
//字符串连接符:+
System.out.println(m+n); //结果为30
System.out.println(""+m+n); //结果为1020
//"":这里是Strin类型,它会把后面的也转化为String类型然后拼接起来,这里m=10,n=20,所以是1020
System.out.println(m+n+""); //结果为30
//因为m+n在String类型前面,所以它还是会先把m+n运算
System.out.println("==============================");
//三元运算符? :
//X ? Y : Z 即如果X==true,则结果为Y,否则为Z
int score = 80; //score:成绩
String type = score < 60 ? "不及格":"及格";
System.out.println(type); //结果为及格
}
}