【运算符】四则运算,三元运算,自加减运算,逻辑运算,位运算

基本数据类型之后,运算符

  • 四则运算
    没啥好说的,+,-,*,/
    只有一点要说的是‘/’除运算取得是整数
  • 三元运算
    写法:y = x ? a : b
  • 自加自减运算
    更没啥好说的,a++,b–,--a,–b
  • 逻辑运算
    没啥好说的:
    逻辑与:&&
    逻辑或: ||
    逻辑非:!
  • 位运算
    位运算操作的是二进制数,所以要进行位运算,前提是我们这数得是二进制。位运算包括与(&),或(|),非(!),异或(^),移位(左移:<<;右移:>>)
    与:&
    • x&1=x:一个数和1与结果不变,即原来是啥还是啥
    • x&0=!x一个数和0与结果位0,即原来是0,结果是0,原来是0,结果还是0
  • 或:|
    x | y只有两个都是0,结果才为0,其他情况全为1
  • 非:!
    取反,0变1,1变0

  • 异或
    x ^ y:x,y相同那么结果为1,否则为0
    同时有这样一个结论:
    与同一个数异或,结果是这个数本身
    记得一个常常碰到的需求:交换两个数
    基本是整一个临时变量,赋过来过去

    int a = 3,b=5
    int temp = a;
    a = b;
    b = temp;
    

    异或也能做到:

    int a=3,b=5;
    a = a^b;
    b = a^b;
    a = a^b
    

    跟下面有种相似的感觉,其实思想应该是差不多的

    int a=3,b=5
    a = a+b;
    b = a-b;
    a = a-b;
    
  • 移位
    移位运算是对存储在内存中数的直接操作,数字以2进制01序列存在内存中,同时其长度固定,如int型的整数为32位01序列组成,位运算直接对01序列整体移动,高位超出范围舍弃,低位超出范围舍弃,因为移动空出来的位补0,左移即将序列整体左移左移,低位会被移出范围,高位会产生空位,补0,右移一个道理。
    基于此,有几个结论:

    • 右移相当于原数除以2的移动位数次幂
      如:8<<2<==>8*2^2=32
    • 左移相当于原数乘以2的移动位数次幂
      System.out.println(“8<<2=”+(8<<2));
    • 需要注意的是,还有一个移位运算>>>,与>>不同之处在于它是无符号位运算,即右移后只补0

你可能感兴趣的:(JavaSE)