算术运算符

  • 加:+
  • 减:-
  • 乘:*
  • 除:/
    • 整数与整数相除,结果还是整数,即只保留整数部分
  • 模/取余:%
    • 结果的正负号只看被除数
  • 正号:+
  • 负号:-
  • 自增:++
    • 单独运算:++在前,先自增再取值到操作数栈
    • 复合运算:
      • ++在前,先自增再取值到操作数栈
      • ++在后,先取值放到操作数栈然后变量自己自增
  • 自减:--
    • 类同于自增

赋值运算符

  • 基本赋值运算符:=
  • 扩展赋值运算符:+=,-=,*=,/=,%=,>>=,<<=,&=…
    • 会用=左边的变量的值,与=右边的表达式一起做运算,并且如果最后计算结果的类型比左边的变量的类型大了,会隐式的发生强制类型转换

注意:无论是基本复制运算符还是扩展赋值运算符都是最后算,并且是把右边的计算结果最后赋值给左边的变量,即左边一定是一个变量

  1 byte b1 = 1;
  2 byte b2 = 2;
  3 byte b3 = b1 + b2;//编译错
  4
  5 b1 +=  b2;//编译通过

关系运算符/比较运算符

  • 大于:>
  • 小于:<
  • 大于等于:>=
  • 小于等于:<=
  • 等于:==
  • 不等于:!=

注意:所有比较运算符的结果都是true/false,所以比较运算符通常用作条件判断

逻辑运算符

  • 逻辑与:&
    • true & true,结果是true
    • true & false,结果是false
    • false & true,结果是false
    • false & false,结果是false
    • 只有两边都是true,结果才为true
  • 逻辑或:|
    • true | true,结果是true
    • true | false,结果是true
    • false | true,结果是true
    • false | false,结果是false
    • 只要两边有一个为true,结果就为true
  • 逻辑非:!
    • !true为false
    • !false为true
  • 逻辑异或:^
    • true ^ true,结果是false
    • true ^ false,结果是true
    • false ^ true,结果是true
    • false ^ false,结果是false
    • 两边相同为false,不同为true
  • 短路与:&&
    • true && true,结果是true
    • true && false,结果是false
    • false && true,结果是false
    • false && false,结果是false
    • 只有两边都是true,结果才为true,但是当左边为false时,右边不看
  • 短路或:||
    • true || true,结果是true
    • true || false,结果是true
    • false || true,结果是true
    • false || false,结果是false
    • 只要两边有一个为true,结果就为true,但是当左边为true时,右边不看

注意:逻辑运算符的操作数必须是boolean类型

条件运算符/三元运算符

格式:条件表达式 ? 结果表达式1 : 结果表达式2

    当条件表达式为true时,就取结果表达式1的值,否则取结果表达式2的值

    位运算符

    • 左移:<<
      • 快速算的口诀:乘以2的n次方
    • 右移:>>
      • 快速算的口诀:除以2的n次方
    • 无符号右移:>>>
      • 正数:和右移一样
      • 负数:变为正数
    • 按位与:&
      • 1&1结果为1
      • 1&0结果为0
      • 0&1结果为0
      • 0&0结果为0
    • 按位或:|
      • 1|1结果为1
      • 1|0结果为1
      • 0|1结果为1
      • 0|0结果为0
    • 按位异或:^
      • 1^1结果为0
      • 1^0结果为1
      • 0^1结果为1
      • 0^0结果为0
    • 按位取反:~
      • ~1为0
      • ~0为1

    注意:

    (1)当左移、右移、无符号右移要移动的位数超过数据类型的总位数,会出现循环,移的位数没有超过数据类型的总位数时,不会出现循环。byte,short,char在移位时,按照int类型处理

    (2)在补码的基础上计算

    运算符优先级

    大体上:()等>算术运算符>位运算符>比较运算符>逻辑运算符>条件运算符>赋值运算符

    自己写的原则:尽量不要太复杂,保证可读性

    02-11 09:38