zoukankan      html  css  js  c++  java
  • Java运算符使用总结(重点:自增自减、位运算和逻辑运算)

     Java运算符共包括这几种:算术运算符、比较运算符、位运算符、逻辑运算符、赋值运算符和其他运算符。(该图来自网络) 

    简单的运算符,就不过多介绍使用了,可自行测试。关于赋值运算,可以结合算术运算和位运算来简化代码。

            int a = 5;
            a += a; // a = a + a;
            a /= a; // a = a / a;
            a %= a; // a = a % a;
            a &= 6; // a = a & 6;
            //.....

    理解自增自减运算符

    自增自减分为前置和后置。例如:i++  ++i i-- --i。 要明确一点,前置与后置的自增或自减运算符若没运用到表达式中,那么无区别;若是参与到表达式运算中,只需记住:谁在前面就先执行谁。

            int a = 0;
            a++; //或者++a
            System.out.println(a); // a输出1 
        //最常见的for循环中,在迭代条件中,i++ 和 ++i无区别,因为没有用于表达式。

     将前置自增和后置自增运用到表达式

            int a = 5;
            System.out.println(a--); //5,先打印a的值,之后a自减1
            System.out.println(a); //4
            System.out.println(++a); //5, 先对a值自增,然后打印a值

    复杂一点,更好的理解前置和后置的区别:

            int a = 6;
            int b = 8;
            int c = ++a + b-- - a-- + --b + b++ + --a;
            System.out.printf("%d|%d|%d", a,b,c); // 5,7,25

    使用图片来理解会更加一目了然。

     再随便给一个,按照图示方式去理解自增自减。

            int a = 6,b = 8;
            int c = (--a) + (a--) - (b--) + (++b) + (a++) - (b--); //加括号更容易阅读
    //        int c = --a + a-- - b-- + ++b + a++ - b--;
            System.out.printf("%d|%d|%d", a,b,c); // 5,7,6
        }

     通过图片的理解方式去学习自增自减,无论是前置还是后置,无论会有多复杂,都可以很有条理的解决。 当然,写程序时别写这么复杂,因为没意义,这里仅是用于理解。

    理解位运算符

    程序中的所有数在内存中都是以二进制的形式存储,位运算符就是直接对二进制数进行操作运算,速度很快。 位运算符包括 & | ~ ^ << >> >>>。 下面会一一介绍。 其中二进制数的1表示真, 0表示假

    按位与(&):若相对应位都为1,则为1,否则为0。 

                   15 & 5 = 5           16 & 12 = 0              18 & 14 = 2

            15  1 1 1 1                     16  1 0 0 0 0                            18  1 0 0 1 0
            -----------                        -------------                            -------------
            5   0 1 0 1                     12  0 1 1 0 0                            14  0 1 1 1 0
            -----------                        -------------                            -------------
                0 1 0 1 (十进制为5)              0 0 0 0 0 (十进制为0)                     0 0 0 1 0 (十进制为2)

    按位或(|):若相对应位其中一个为1,则为1,否则为0。  

         9 | 11 = 11                                 5 | 20 = 21

            9   1 0 0 1                     5   0 0 1 0 1                            
            -----------                        -------------                            
            11  1 0 1 1                     20  1 0 1 0 0                            
            -----------                        -------------                            
                1 0 1 1 (十进制为11)             1 0 1 0 1 (十进制为21)    

    按位异或(^):若相对应位互不相同,则为1,否则为0。 

          9 ^ 11 = 2          5 ^ 20 = 17

            9   1 0 0 1                     5   0 0 1 0 1                            
            -----------                        -------------                            
            11  1 0 1 1                     20  1 0 1 0 0                            
            -----------                        -------------                            
                0 0 1 0 (十进制为2)              1 0 0 0 1 (十进制为17)    

    按位取反(~) 

    假设要取反的数为n, 那么公式如下:

    ~n = -(n+1),正整数按位取反的数是它本身+1的负数。
    
     ~ -n = | -n + 1 |, 负整数按位取反的数是它本身+1的绝对值。
    例如:~10 = -11;   ~ -11 = 10;

    按位左移和右移(<< >>):左移表示二进制数向左移动指定位数,低位补相应0填充。 右移表示二进制数向右移动指定位数,高位补相应0填充。

    左移运算原理

            11  0 0 0 0 1 0 1 1                                 65   1 0 0 0 0 0 1                            
           <<2  0 0 1 0 1 1 0 0 (低位补相应0)                    <<3  1 0 0 0 0 0 1 0 0 0                        
                ---------------                                      -------------------
                101100 = 2^5 + 2^3 + 2^2 = 44                        1000001000 = 2^9 + 2^3 = 520    

     右移运算原理

            75  1 0 0 1 0 1 1                   65   1 0 0 0 0 0 1                            
           >>6  0 0 0 0 0 0 1                   >>3  0 0 0 1 0 0 0  [低位移除 0 0 1, 高位补相应位数0]                         
                -------------                        ---------------
                0001 = 1                             1000 = 8

    左移与右移的运算规律总结:左移几位就乘以2的几次方 , 右移几位就除以2的几次方。

    4<<5 为例,就是4 * 2^5 = 4 * 32 ,很快得出结果128

    10>>2 ,10除以 2的2次方  10/4 = 2。

    若想快速获取2的N次方,只需 1<<N 即可,例如 1<<10 = 2 ^ 10 = 1024

    理解逻辑运算符

    逻辑运算符一般使用:逻辑与(&&)、逻辑或(||)和逻辑非(!)。逻辑运算符也称为短路运算。

    &&表示and, 两边操作数都为真,才为真,否则为假。左边为假时,不再计算右边。 true && true = true,  false && true = false

    ||表示or, 两边操作数其中一个为真,则为真,否则为假。左边为真时,不再计算右边。 true || false = true,  false || false = false

    !表示取反,若操作数为真,则为假;操作数为假,则为真。 !true = false  !false = true。 取反逻辑很有用,可以简化逻辑操作。

            //判断闰年  能整除400 或者 能整除4但不能整除100
            if((year % 400 == 0) || (year % 4 == 0) && year % 100 != 100)
            
            //求出能同时整除5和7的数
            if(num % 5 == 0 && num % 7 == 0)
            
            //求出能整除6 或者 整除8的数
            if(num % 6 == 0 || num % 8 == 0)
            
            //求出能整除 7 但不能整除9的数
            if(num % 7 == 0 && num % 9 != 0)
    
            //某些boolean方法, 例如判断质数。
             boolean isPrime(int i) {}
             //通过取反操作,求某个范围中不是质数的数。 !true = false,不执行。 !false = true,执行。  
             if(!isPrime()) {}

    除了以上之外,另外说一下按位异或^用于逻辑运算。 

                //要么整除5,要么整除8,但不能同时整除5和8。使用异或^来完成互斥逻辑
                if(num % 5 == 0 ^ num % 8 == 0)
                //T ^ T = false,  T ^ F = true, F ^ T = true
  • 相关阅读:
    第二十二章 6未命名的命名空间 简单
    第二十二章 4使用关键字using 简单
    第二十三模板 3具体化函数模板 简单
    第二十二章 2创建命名空间 简单
    第二十三模板 7复杂类模板 简单
    第二十二章 3使用命名空间 简单
    第二十二章 1什么是命名空间 简单
    第二十三模板 2重载模板 简单
    第二十三模板 1什么是模板 简单
    测定事务引擎设计的基准
  • 原文地址:https://www.cnblogs.com/fwnboke/p/8525369.html
Copyright © 2011-2022 走看看