1. 位运算
/* A = 0011 1100;
* B = 0000 1101;
* ----------------------------------
* 与:
* A&B = 0000 1100;//都为1的才是1
* 或:
* A|B = 0011 1101;//有1的就是1
* 异或:
* A^B = 0011 0001;//只有一个1的才是1
* 非:
* ~A = 1100 0011;//所有位取反
*/
// << : a<<n, a(转二进制后)左移n位 相当于乘了2^n
System.out.println("2*8 = 2<<3 = " + (2<<3));//16
// >> :a>>n, a(转二进制后)右移n位 相当于除了2^n
System.out.println("24/8 = 24>>3 =" + (24>>3));//8
2. 优先级
算术运算符:+,-,*,/,%,++,--
赋值运算符:=
扩展后的赋值运算符:+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=,>>>=
关系比较运算符:>,>=,<,<=,==
逻辑运算符:&&,&,||,|,!,^
位运算符:&,|,~,^,<<,>>,>>>
- >>>(无符号右移运算符)和 >> 的区别在于: >>> 负数高位补 0;>> 负数高位补1;
三目运算符:? :
- (expression) ? if-true-statement : if-false-statement;
2.1逻辑与或非优先级:
- 逻辑非>逻辑与>逻辑或
2.2 符号优先级表
优先级 | 运算符名字 | 说明 | 类 | 结合性 | 其他说明 |
---|---|---|---|---|---|
1 | () [] . {} | 括号,方括号,点, 集合 | 分隔符 | 从左往右 | |
2 | !+(正)-(负)~ ++ -- | 逻辑非,正号,负号,按位取反,自增,自减 | 一元运算符 | 从右往左 | |
3 | (type) | 强制类型转换运算符 | 无 | 本质是()提出来的优先级 | |
4 | * / % | 乘,除, 取余 | 二元运算符 | 从左往右 | |
5 | + - | 加,减 | 二元运算符 | 从左往右 | |
6 | << >> >>> | 左移,右移,无符号右移 | 位移运算符 | 从左往右 | a>>b, a (转二进制后)右移b位 |
7 | < <= > >= instanceof | 小于,小于等于,大于,大于等于,类属 | 关系运算符 | 从左往右 | |
8 | == != | 等价于,不等于 | 等价运算符(关系运算符) | 从左往右 | |
9 | & | ^ | 按位与,按位或,按位异或 | 位逻辑运算符 | 从左往右 | 按位与>按位异或>按位或 |
10 | && || | 逻辑与,逻辑或 | 逻辑运算符 | 从左往右 | 逻辑与>逻辑或 |
11 | ? : | (expression) ? if-true-statement : if-false-statement; | 三目运算符 | 从左往右 | |
12 | = += -= *= /= | 赋值运算符 | 从右往左 | ||
12 | &= |= ^= %= <<= >>= >>>= | 赋值运算符 | 从右往左 |