Java–运算符
/**
*description: Java--运算符
*@program: JavaProjectDemo
*@author: zy
*@create: 2023-02-09 23:09
*/
public class Operator {
/**
* java语言支持如下运算符:注意优先级时多使用()
* 算术运算符:+,-,*,/,%,++,--
* 赋值运算符:=
* 关系运算符:>,<,>=,<=,==,!=,instanceof
* 逻辑运算符:&&,||,!
* 位运算符:&,|,^,~,>>,<<,>>>(了解即可)
* 条件运算符:?,:
* 扩展赋值运算符:+=,-=,*=,/=
*/
public static void main(String[] args) {
//************** 二元运算符 **************//
int a=10;
int b=20;
int i=21;
System.out.println(a+b);// 30
System.out.println(a-b);// -10
System.out.println(a*b);// 200
System.out.println(a/b);// 0
System.out.println(a/(double)b);// 0.5
// 取余,模运算
System.out.println(i%a);// i/a 21/10=2...1
//************** ++ -- 自增,自减,一元运算符 **************//
a = 3;
b = a++;
// a++ a=a+1;先赋值,再自增
System.out.println(a);// 4
// ++a a=a+1;先自增,再赋值
i = ++a;
System.out.println(a);// 5
System.out.println(b);// 3
System.out.println(i);// 5
//************** 幂运算 2^3(Java中没有幂运算的运算符) 2*2*2=8 **************//
// 很多运算,借助一些工具类来操作,比如:Math
double pow = Math.pow(2, 3);
System.out.println(pow);// 8.0
/***************
* 如果运算中的一个变量为long,则运算结果为long,如果没有long其余数值类型的运算结果则为int
* 同理:如果运算中有个一变量为double,则结果为double,否则为float
*/
long s = 12312312321L;
int d = 123;
short c = 12;
byte h = 8;
System.out.println(s+d+c+h);// long
System.out.println(d+c+h);// int
System.out.println(c+h);// int
//************** 关系运算符返回的结果:false,true **************//
int x = 10;
int y = 20;
System.out.println(x>y);// false
System.out.println(x<y);// true
System.out.println(x==y);// false
System.out.println(x!=y);// true
//************** 逻辑运算符:与(and) 或(or) 非(取反) **************//
boolean b1 = true;
boolean b2 = false;
System.out.println("b1 && b2:"+(b1 && b2));// false 逻辑与运算:两个变量都为true,结果为true
System.out.println("b1 || b2:"+(b1 || b2));// true 逻辑或运算:两个变量有一个为true,结果为true
System.out.println("!(b1 && b2):"+!(b1 && b2));// true 逻辑非运算:如果是true,则变为false,如果是false,则为true
// 短路运算:与运算时:如果第一个结果为false,则后面的代码不执行
int c1=5;
boolean flag = (c1<4)&&(c1++<4);
System.out.println(flag);// false
System.out.println(c1);// 5
//************** 位运算符:&(与)|(或)^(抑或)~(非) **************//
/*
A = 0011 1100
B = 0000 1101
-----------------------
A&B = 0000 1100 (A与B位数比较,都为0则为0,都为1则为1,否则为0)
A|B = 0011 1101(A或B位数比较,都为0则为0,都为1则为1,否则为1)
A^B = 0011 0001(A抑或B位数比较,相同则为0,不相同则为1)
~B = 1111 0010(B取反,B原位数为1,则为0,原位数为0,则为1)
-----------------------
引出面试题:2*8 怎么运算最快?16
解决方案:2*2*2*2
<<(左移) *2 左移1位相当于乘以2
>>(右移) /2 右移1位相当于除以2
位运算:效率极高,直接用二进制运算
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 0101 5
0000 0110 6
0000 0111 7
0000 1000 8
0001 0000 16
0001 1000 24
*/
System.out.println(2<<3);// 2左移3位,结果为16
System.out.println(3<<3);// 3左移3位,结果为24
//************** 扩展赋值运算符:+=,-=,*=,/= **************//
int a1=10;
int a2=20;
a1+=a2;// a1=a1+a2
a1-=a2;// a1=a1-a2
System.out.println(a1);// 10
/*
字符串连接符:+ ,变量两侧若有String类型则结果拼接为String
若String在后,则运算在前;若String在前,则直接拼接所有变量
*/
System.out.println(a1+a2);// 30
System.out.println(a1+a2+"");// 30
System.out.println(""+a1+a2);// 1020
//************** 三元运算符:?: **************//
// x?y:z 如果x为true,则结果为y,否则结果为z
int score = 80;
String result = score < 60 ? "不及格" : "及格";
System.out.println(result); // 及格
}
}