Day06 运算符

发布时间 2023-11-27 00:58:59作者: 问稻

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