运算符
算术运算符
在Java基本语法1文章末尾可见
比较运算符
>,>=,<,<=,==,!=
==, !=既可以用于数值之间的比较,也可以用于比较布尔值之间的比较,还可以用于引用数据类型
>, <, >=, <= 只能用于数值之间的比较
返回值都是true或false
public static void main(String[] args) {
System.out.println('a'>10);
System.out.println(10>5);
System.out.println('a'!=80);
System.out.println(true==true);
System.out.println("abc"=="abc");
}
赋值运算符
= += -= *= /= %=
把右边的值赋给左边变量。注意:右边字面常量和左边字面常量的变量类型需要一致(也可以小类型隐式转换为大类型)注意强制转换
public static void main(String[] args) {
int a = 10;
a += 5;//a=a+5
System.out.println(a);//15
a -= 5; //a=a-5
System.out.println(a);
short s = 3;
// s = s+2; 运算结果是int
s+=2;//会隐式展缓 展开--> s = (short)(s+2)
System.out.println(s);
boolean b1 = false;
//注意区别==和=,==是比较运算符,=是赋值运算符。
if(b1 = true){
System.out.println(1);
}else{
System.out.println(2);
}//1
int i = 1;
i *= 0.1;//i = (int)(i*0.1)
System.out.println(i);//0
i++;
System.out.println(i);//1
}
逻辑运算符
&一逻辑与 |一逻辑或 !一逻辑非
&&一短路与 ||一短路或 ^一逻辑异或(相同为false,不同为true)
都只能是逻辑值与逻辑值之间的计算
逻辑与 & && 当所有的表达式结果为true,结果为true,只要有一个false,结果为false
&:不会出现短路现象。前面已经有表达式为false,后面表达式还会运行
&&:会出现短路现象,所以称为短路与。一旦有表达式值为false,后面其他的表达式就不执行了,称为短路(常用,效率)
public static void main(String[] args) {
int a = 10;
int b = 15;
int c = 20;
System.out.println(a<b & c>b);//true & true = true
System.out.println(a>b & c++>b);//false & true = false
System.out.println(c);//21
}
逻辑或 | ||表达式只要有一个为true,结果为true
|:不会出现短路现象。有表达式返回true,但后面的表达式还会运行
||:会出现短路现象。一旦出现有表达式返回true,后面的的表达式不会执行
public static void main(String[] args) {
int a = 10;
int b = 15;
int c = 20;
System.out.println(a<b | c>b);//true | true = true
System.out.println(a<b || c++<b);//true | false = true
System.out.println(c);
}
^ 逻辑异或 重点突出“异”,不同返回true
!逻辑非 相反
public static void main(String[] args) {
int a = 10;
int b = 15;
int c = 20;
/*
^ 逻辑异或 重点突出就是 异 不同返回true
*/
System.out.println(a<b ^ c<b);//true ^ false = true
System.out.println(a<b ^ c>b);//true ^ true = false
/*
! 逻辑非 相反
*/
System.out.println(!true);
System.out.println(!(a>b));
int a1 = 10, b1 = 10, c1 = 10;
boolean result = a1++ == 10 && b1-- == 10 || ++c1 ==100;
System.out.println(result);
}
条件运算符
结果 = (条件表达式)?结果1:结果2;
当条件表达式结果为true时,返回?后的结果
当条件表达式结果为false时,返回:后的结果
public static void main(String[] args) {
int score = 60;
String result = (score>=60)?"及格":"不及格";
System.out.println(result);
int a = 10;
int b = 20;
int max = (a>b)?a:b;
System.out.println(max);
}
位运算符(目前先做了解)
<< >> >>> & | ^ ~
是对整数的二进制进行运算的
<< 左移 二进制的比特位向左移动 后面空缺的补0
>> 右移 二进制的比特位向右移动 带符号的移动:正数移动后,符号位补0,负数移动后,符号位补1
>>> 无符号右移,不管是正数还是负数,符号位统一补0,结果肯定为正数
public static void main(String[] args) {
int a = 2;
// 0000 0010
// 0000 0100
int b = a<<1;
System.out.println(b);
// 0000 1000
// 0000 0100
int c = 8;
int d = c>>1;
System.out.println(d);
int x = 8;
int y = x>>>1;
System.out.println(y);//4
int n = -8;
int m = n>>1;
System.out.println(m);
int x1 = -8;
int y1 = x1>>>1;
System.out.println(y1);
}
& | ^ 既可以当作逻辑运算符,也可以当作位运算符
public static void main(String[] args) {
int a = 5;
int b = 4;
/*
0000 0101 5
0000 0100 4 & 对位运算,11为1,其他0
0000 0100 4
*/
System.out.println(a & b);
/*
0000 0101 5
0000 0100 4 | 对位 00->0 其他1
0000 0101 5
*/
System.out.println(a | b);
int x = 4;
int y = 5;
/*
0000 0100 4
0000 0101 5 ^ 对位 相同为0,不同为1
0000 0001 1
*/
System.out.println(x ^ y);
}
~ 取反
public static void main(String[] args) {
int x = 4;
/*
计算机中数值存储时,都用的补码存储的
正数的补码 反码 原码 三码合一,
负数以补码形式表示
数值二进制为什么要用补码储存,因为计算机只能做加法 把减法 转换为加法
3-2=1-->3+(-2)=1
+3 0000 0011
-2 1111 1110
0000 0001
2 0000 0001
1111 1101 反码 +1
1111 1110 -2的补码
+5 0000 0101原码
1111 1010反码
-5 1111 1011补码 计算机只能做加法运算
3-2 = 1 3+(-2) = 1
0000 0100 4 ~ 取反
1111 1011 -5
*/
System.out.println(~x);
}