Java第四课

Java第四课

一、运算符

  1. 算术运算符

    +,-,*,/,%(质数,奇偶),++,--(问题最大)

    ++ 一目运算符

        public static void main(String[] args) {
           int num = 1;
           // 在JVM中先取num的值,再对值进行运算
           // 在效果上相当于两个语句,第一个是直接打印num
           // 第二个是对num进行加1
           System.out.println(num++);
           System.out.println(num);
      }
        public static void main(String[] args) {
           int m = 1;
           int n = 1;
           int p = m++ + m + n++ + n;
           System.out.println(p);
           p = m++ + m++ + n++ + n++;
           System.out.println(p);
      }

    自增和自减的一个重要的现象:当符号在变量前时,JVM先看到的是要做的事,即加或减,然后找变量看是对哪个变量进行操作,结果是对变量操作完成

  2. 关系运算符

    == ,!=,>,<,>=,<=

  3. 位运算符

    首先要知道数字在计算机中的存储形式,转换为二进制,正数(原码,补码),负数以补码形式存在

    对于一个负数,进行位运算,首先把数字换成它的原码,然后再反码,再补码,对补码进行位运算,然后,把结果反码再原码,再十进制

    & | ^ ~

            int m = 1;
           int n = 1;
           // 0000 0001
           // 0000 0001
           // ---------
           // 0000 0001
           System.out.println(m&n);
           // & | ^ ~
           System.out.println(~m);
            byte b1 = -3;
           byte b2 = 3;
           // b1:1000 0011;\ 1111 1100\ 1111 1101
           // b2:                         0000 0011
           //                             0000 0001
           System.out.println(b1&b2);
           byte b3 = -3;
           System.out.println(b1 & b3);
    // 补码:1111 1101 | 1111 1100 | 原码1000 0011
           // b1:1000 0011 | 1111 1100 | 1111 1101
          // b2:1000 0100 | 1111 1011 | 1111 1100
          // ------------------------------------
          //                           1111 1101
         // 补码:1111 1101 | 反码:1111 1100 | 原码:1000 0011 十进制:-3
           byte b = 2 << 3;
           System.out.println(b);
           System.out.println(4 << 2);
           System.out.println(-4 << 3);
           // -4: 1000 0100 | 1111 1011 | 1111 1100.
           //1110 0000. | 1101 1111 | 1010 0000

    右移和左移相反,相当于对原数进行2的n次方的除法

    16 >> 2 = 16 / 4 ;

            System.out.println(16 >> 2);
           System.out.println(-16>> 2);
           System.out.println(-16>>3);

    无符号右移>>>

    对于正数的无符号右移和普通右移一样

            byte b = -8;
           // 把-8换成int型的补码
           // b: 1000 1000 | 1111 0111 | 1111 1000
           // 1111 1111 1111 1111 1111 1111 1111 1000
           // 0011 1111 1111 1111 1111 1111 1111 1110
           System.out.println(-8>>>2);



posted @ 2021-02-22 12:05  若你  阅读(47)  评论(0编辑  收藏  举报