java运算符
对常量和变量进行操作的过程,称为运算;
对常量和变量进行操作的符号,称为运算符.
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
三目运算符
![](https://images2018.cnblogs.com/blog/1191677/201804/1191677-20180430190901427-1285505818.png)
![](https://images2018.cnblogs.com/blog/1191677/201803/1191677-20180302095321510-1683413321.png)
![](https://images2018.cnblogs.com/blog/1191677/201803/1191677-20180302095321888-1124604819.png)
![](https://images2018.cnblogs.com/blog/1191677/201803/1191677-20180302095322488-686218374.png)
![](https://images2018.cnblogs.com/blog/1191677/201803/1191677-20180302095322758-1362901391.png)
·a:单独使用:
放在操作数的前面和后面效果一样。(这种用法是我们比较常见的)
·b:参与运算使用:
放在操作数的前面,先自增或者自减,然后再参与运算。
放在操作数的后面,先参与运算,再自增或者自减。
![](https://images2018.cnblogs.com/blog/1191677/201803/1191677-20180302095323114-1655369549.jpg)
![](https://images2018.cnblogs.com/blog/1191677/201803/1191677-20180302095323552-1080817334.jpg)
注意2:"=="不能写成"="。
int a = 10;
int b = 20;
//boolean flag = (a == b);
//boolean flag = (a = b); //这个是有问题的,不兼容的类型
//System.out.println(flag);
int c = (a = b); //把b赋值给a,然后把a留下来
System.out.println(c); //20
![](https://images2018.cnblogs.com/blog/1191677/201804/1191677-20180418224412275-1761939033.png)
注意:
要做位运算,首先要把数据转换为二进制。
class OperatorDemo {
public static void main(String[] args) {
int a = 3;
int b = 4;
System.out.println(3 & 4);
System.out.println(3 | 4);
System.out.println(3 ^ 4);
System.out.println(~3);
}
}
/*
分析:因为是位运算,所以我们必须先把数据换算成二进制。
3的二进制:11
00000000 00000000 00000000 00000011
4的二进制:100
00000000 00000000 00000000 00000100
&位与运算:有0则0。
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000000
结果是:0
|位或运算:有1则1。
00000000 00000000 00000000 00000011
|00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000111
结果是:7
^位异或运算:相同则0,不同则1。
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000111
结果是:7
~按位取反运算符:0变1,1变0
00000000 00000000 00000000 00000011
~11111111 11111111 11111111 11111100 (补码)
补码:11111111 11111111 11111111 11111100
反码:11111111 11111111 11111111 11111011
原码:10000000 00000000 00000000 00000100
结果是:-4
*/
^的特点:一个数据对另一个数据位异或两次,该数本身不变。
class OperatorDemo2 {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a ^ b ^ b); //10
System.out.println(a ^ b ^ a); //20
}
}
<<:左移 左边最高位丢弃,右边补齐0
>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1
>>>:无符号右移 无论最高位是0还是1,左边补齐0
class OperatorDemo3 {
public static void main(String[] args) {
//<< 把<<左边的数据乘以2的移动次幂
System.out.println(3 << 2); //3*2^2 = 3*4 = 12;
//>> 把>>左边的数据除以2的移动次幂
System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6
System.out.println(24 >>> 2); //6
System.out.println(-24 >> 2); //-24 / 2^2 = -24 / 4 = -6
System.out.println(-24 >>> 2); //1073741818
}
}
/*
<<的移动:
计算出3的二进制:11
00000000 00000000 00000000 00000011
(00) 000000 00000000 00000000 0000001100
>>的移动:
计算出24的二进制:11000
-24的原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) -24补码>>2
补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110
结果:-6
>>>的移动:
计算出24的二进制:11000
-24的原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00) -24>>>2
结果:1073741818
*/
class OperatorDemo {
public static void main(String[] args) {
int x = 100;
int y = 200;
int z = ((x > y)? x: y);
//int z = ((x < y)? x: y);
//int z = ((x == y)? x: y);
//报错
//int z = ((x = y)? x : y);
System.out.println("z:"+z);
}
}
单目运算符:~3
双目运算符:3 + 4
练习:获取两个整数中的最大值
获取三个整数中的最大值
比较两个整数是否相同
class OperatorTest {
public static void main(String[] args) {
//获取两个整数中的最大值
int x = 100;
int y = 200;
int max = (x > y? x: y);
System.out.println("max:"+max);
System.out.println("--------");
//获取三个整数中的最大值
int a = 10;
int b = 30;
int c = 20;
//①分两步:
//A:先比较a,b的最大值
//B:拿a,b的最大值在和c进行比较
int temp = ((a > b)? a: b);
//System.out.println(temp);
int max1 = (temp > c? temp: c);
System.out.println("max1:"+max1);
//②一步搞定
//int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);
//这种做法不推荐。
//System.out.println("max2:"+max2);
System.out.println("--------");
//比较两个整数是否相同
int m = 100;
int n = 200;
//boolean flag = (m == n)? true: false;
boolean flag = (m == n); // m==n本身就是布尔类型
System.out.println(flag);
}
}
优先级 描述 运算符
1 括号 ()、[]
2 正负号 +、-
3 自增自减,非 ++、--、!
4 乘除,取余 *、/、%
5 加减 +、-
6 移位运算 <<、>>、>>>
7 大小关系 >、>=、<、<=
8 相等关系 ==、!=
9 按位与 &
10 按位异或 ^
11 按位或 |
12 逻辑与 &&
13 逻辑或 ||
14 条件运算 ?:
15 赋值运算 =、+=、-=、*=、/=、%=
16 位赋值运算 &=、|=、<<=、>>=、>>>=
![](https://images2018.cnblogs.com/blog/1191677/201803/1191677-20180302095325027-1519064479.jpg)