第6篇 运算符

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 &= |= ^= %= <<= >>= >>>= 赋值运算符 从右往左

下图来源

image

2.3 &与&&,|与||的异同

  • &与&&

    • 相同点:都需要两边为true结果才是true
    • 不同点:&是位逻辑运算,即使左边为false,右侧照样执行。但是&&如果左边为false,将直接忽略右侧,有人把这种性质称为短路,(短路与)。
  • |与||

  • 相同点:有一边为true结果就是true

  • 不同点:&是位逻辑运算,即使左边为true,右侧照样执行。但是&&如果左边为true,将直接忽略右侧,(短路或)。

posted @   问稻  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示