package com.landray.sty;
public class Demo05 {
public static void main(String[] args) {
// 优先级(一元运算符 ===> - + - * /)建议多使用括号()
// Java语言支持如下运算符:
// 算术运算符:+, -,*,/,%,++,--
// 赋值运算符:=
// 关系运算符:>,<,>=,<=,==,!=,instanceof
// 逻辑运算符:&&,||,!
// 位运算符:&,|,^,~,>>,<<,>>>
// 条件运算符:?:
// 扩展赋值运算符:+=,-=,*=,/=
// 二元运算符(两个数操作的)
int a = 10;
int b = 20;
System.out.println(a + b);// 输出30
System.out.println(a - b);// 输出-10
System.out.println(a * b);// 输出200
// a / b ==> 10/20应该等于0.5这里输出0肯定有问题,因为都是int类型只取整数部分所以是0
System.out.println(a / b);// 输出0
// 转换后输出0.5
System.out.println(a / (double) b);// 输出0.5
long c = 123123123123123L;
int d = 123;
short e = 10;
byte f = 8;
System.out.println(c + d + e + f);// 输出 123123123123264(long类型)
System.out.println(d + e + f);// 输出141(int类型)
System.out.println(e + f);// 输出18(int类型)
System.out.println((double) e + f);// 输出18.0(double类型)
// 如果两个操作数或者多个操作数中有一个为long,那么结果类型也为long,如果没有long,结果都为int,无论有没有int类型
int x = 20;
double y = 99;
int w = 33;
long u = 8989989;
System.out.println(x);// 输出20
System.out.println(y);// 输出99.0
System.out.println(x + w + u);// 输出8990042(long类型)
System.out.println(x + y + w + u);// 输出8990141.0(double类型)
// 如果两个操作数或者多个操作数中有一个为double,那么结果类型也为double
}
}
package com.landray.sty;
public class Demo06 {
public static void main(String[] args) {
// ++(自增) --(自减) 一元运算符
int a = 3;
int b = a++;// 执行完这行代码后,先给b赋值,再自增
// a = a+1;
System.out.println(a);// 输出4
// a = a+1;
int c = ++a; // 执行完这行代码前,先自增,再给c赋值
System.out.println(a);// 输出5
System.out.println(b);// 输出3
System.out.println(c);// 输出5
// 幂运算 2^3(2的3次方) 2*2*2 = 8 (很多运算,我们会使用一些工具类来操作)
double pow = Math.pow(2, 3);
System.out.println(pow);// 输出8.0
double pow1 = Math.pow(3, 2);
System.out.println(pow1);// 输出9.0
}
}
package com.landray.sty;
public class Demo07 {
public static void main(String[] args) {
// 与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
// 逻辑与运算:两个变量都为真的,结果才为true
System.out.println("a && b:" + (a && b));// 输出a && b:false
// 逻辑或运算:两个变量有一个为真,贼结果才为true
System.out.println("a ||&& b:" + (a || b));// 输出a ||&& b:true
// 如果是真,则变为假,如果是假,则变为真
System.out.println("!(a && b):" + !(a && b));// 输出!(a && b):true
// 短路运算
// 判断的是b为true,a也为true(两个变量都为真的,结果才为true)
// 但是如果一开始就发现b为假的,就不会去进行后面的运算操作
System.out.println("a && b:" + (b && a));
int c = 5;
boolean d = (c < 4) && (c++ < 4);
System.out.println(d);// 输出false
System.out.println(c);// 输出5
// c在这里输出的值为5,就证明 “&& (c++ < 4)”后面这一串并没有执行,因为如果执行了c++后的值为6
// 因为前面一段“(c < 4)”已经为false了,所以不会去进行后面的逻辑运算了
}
}
package com.landray.sty;
public class Demo08 {
public static void main(String[] args) {
// 位运算符(二进制相关)
// 二进制数字
// 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,否则为1)
// A~B = 1111 0010
// 扩展:
// 2*8 = 16 怎么计算最快?
// 拆分:2*2*2*2
// 效果极高,与底层打交道
// << 左移相当于 *2
// >> 右移相对于 /2
// 二进制中 0000 0000 代表 0
// 二进制中 0000 0001 代表 1
// 二进制中 0000 0010 代表 2
// 二进制中 0000 0011 代表 3
// 二进制中 0000 0100 代表 4
// 二进制中 0000 1000 代表8
// 二进制中 0001 0000 代表 16
System.out.println(2 << 3);// 输出16(2左移3位变成了16)
}
}
package com.landray.sty;
public class Demo09 {
public static void main(String[] args) {
int a = 10;
int b = 20;
a += b;// a = a + b;
System.out.println(a);// 输出 30
a -= b;// a = a - b;
System.out.println(a);// 输出 10
// 字符串连接符 +
System.out.println(a + b);// 输出30
// ""-代表(空字符串),+运行符两侧只要有一方出现了String(字符串类型),就会把其他操作数都转换成String进行连接
// 字符串在前,后面的会进行拼接
System.out.println("" + a + b);// 输出1020(把a和b连接起来了,并没有进行运行)
// 字符串在后,前面的数依旧会进行运算
System.out.println(a + b + "");// 输出30
// 三元运算符
// x ? y : z
// 如果x==true,则结果为y,否则结果为z
int score = 80;
String type = score < 60 ? "不及格" : "及格";
System.out.println(type);// 输出及格
}
}