Java运算


public class Demo {

  public static void main(String[] args) {
    test1();
    test2();
    test3();
    test4();
    test5();
    test6();
    test7();
    test8();
  }

  /**
   * &(按位与),有0即为0
   *
   * &按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
   *
   * 3的二进制位是0000 0011 , 5的二进制位是0000 0101 , 那么就是011 & 101,由按位与运算规则得知,001 & 101等于0000 0001,最终值为1
   *
   * 7的二进制位是0000 0111,那就是111 & 101等于101,也就是0000 0101,故值为5
   *
   */

  private static  void test1(){
    int i =3;   //0000 0011
    int h=5;    //0000 0101    0000 0001
    System.out.println("test1()---->& ---->" +(i & h));
  }

  /**
   * &&(逻辑与)
   *
   * &&逻辑与也称为短路逻辑与,先运算&&左边的表达式,一旦为假,后续不管多少表达式,均不再计算,一个为真,再计算右边的表达式,两个为真才为真。
   *
   */
  private static  void test2(){
    int i =3;
    int h=5;
    System.out.println("test2()---->&& ---->" +(3/100==0 && true));
  }

  /**
   * |(按位或)有1即为1
   *
   * |按位或和&按位与计算方式都是转换二进制再计算,不同的是运算规则(一个为真即为真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
   *   6的二进制位0000 0110 , 2的二进制位0000 0010 , 110|010为110,最终值0000 0110,故6|2等于6
   */

  private static  void test3(){
    int i =3; // 000 011
    int h=5;  // 000 101  ---->  000111

    System.out.println("test3()---->| ---->" +(3 | 5));
  }

  /**
   * ||(逻辑或),有真即为真,
   * 逻辑或||的运算规则是一个为真即为真,后续不再计算,一个为假再计算右边的表达式。
   */

  private static  void test4(){
    System.out.println("test4()---->|| ---->" +(true || false));
  }

  /**
   * ^异或
   *
   * ^异或运算符顾名思义,异就是不同,其运算规则为1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
   * 5的二进制位是0000 0101 , 9的二进制位是0000 0011,也就是0101 ^ 0011,结果为1100 , 00001100的十进制位是12
   *
   */
  private static void test5(){
    int i =3;  //0011
    int h=5;   //0101   0110
    System.out.println("test5()---->^ ---->" +(i^h));
  }

  /**
   * <<
   * 5<<2的意思为5的二进制位往左挪两位,右边补0,5的二进制位是0000 0101 ,
   * 就是把有效值101往左挪两位就是0001--> 0100 ,正数左边第一位补0,负数补1,等于乘于2的n次方,十进制位是20
   */
  private static void test6(){
    int h=5;   //0101  0101
    System.out.println("test6()---->^ ---->" +(5<<2));
  }

  /**
   *  >>
   * 5>>2的意思为5的二进制位往右挪两位,左边补0,5的二进制位是0000 0101 ,
   * 就是把有效值101往右挪两位就是0101 (0000 0001),正数左边第一位补0,负数补1,等于乘于2的n次方,十进制位是20
   */
  private static void test7(){
    int h=5;   //0101 ---> 0000 0001
    System.out.println("test7()---->^ ---->" +(5>>2));
  }

  /**
   * >>> 无符号位右移
   */
  private static void test8(){
    //0000 1111 ---->  0011
    System.out.println("test7()---->^ ---->" +(15>>>2));
  }
}

文章作者: 凌云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 凌云 !
  目录