美文网首页
2018-06-20 逻辑运算符

2018-06-20 逻辑运算符

作者: MiaLing007 | 来源:发表于2018-06-20 19:59 被阅读0次

    逻辑运算符

    Boolean类型运算时如下:
    -----------------------------------------------------------------------
    |     运算符     |      运算       |           范例            |      结果     | 
    
    |        &       |      AND(与)    |         false & true     |     false    |
    |        |       |      OR(或)     |         false | true     |     true     |
    |        ^       |     XOR(异或)   |         false ^ true     |     true     |
    |        !       |      NOT(非)    |            !false        |     true     |
    
    |        &&      |      AND(短路)  |         false && true    |     false    | (&&前边的为false,则不会做第二个判断)
    |        ||      |      OR(短路)   |         true || false    |     true     | (||前边的为true,则不会做第二个判断)
    
    
    数值类型运算, 位运算符:

    位运算时,是以二进制位来计算

    -----------------------------------------------------------------------(可以把1看作true, 0看作false)
    |     运算符     |      运算       |           范例            |      结果                  | 
    
    |        &       |      位与       |         0110 & 1100      |     0100(全为1时则为1)    |
    |        |       |      位或       |         0110 | 1100      |     1110 (有1时则为1)      |
    |        ^       |     位异或      |       0110 ^ 1100        |     1010(相同则0,不同则1)  |
    |        ~       |     按位取反    |           ~0110          |     1001(按位取反)          |
    
    

    ~是按位取反,因为计算机中操作时补码,所以计算如下:
    比如计算 ~3
    3为正数所以,计算机中原码,反码,补码相同。
    3的补码为
    00000000 00000000 00000000 00000011
    去反~
    补码:11111111 11111111 11111111 11111100
    反码:11111111 11111111 11111111 11111100(反码为补码减1)
    原码:10000000 00000000 00000000 00000100(-4)
    所以结果: ~3 = 4


    ^ 的特点:一个数对另一个数位异或两次,则该数不变

        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            // 某一个数据对另一个数据异或两次, 该数本身不变
            System.out.println(a ^ b ^ b);
            System.out.println(a ^ b ^ a);
        }
    

    结果:

    10
    20
    

    我们可以使用^位异或做简单 加密 功能,比如传递数据a时,a对b做位异或(a ^ b),然后将结果传给接收方, 接收方再将结果对b进行位异或得到解密后a的值(a ^ b ^ b)。

    位异或还可以用于两个数值交换。例如下:方式2

    /**
         * 实现两个数值交换
         * @param args
         */
        public static void main(String[] args) {
            int a = 10;
            int b = 20;
            
            // 方式1:使用第三个变量方式(开发中常用)
            int temp = a;
            a = b;
            b = temp;
            System.out.println("a="+a+", b="+b);
            
            // 方式2:使用位异或
            a = a ^ b;
            b = a ^ b;  // b = a ^ b ^ b 相当于 b = a;
            a = a ^ b;  // b此时已为a了,a此时为a ^ b, 则相当于 a = a ^ b ^ a 则 a = b;
            System.out.println("a="+a+", b="+b);
            
            // 方式3:使用变量相加的做法
            a = a + b;
            b = a - b;  // 相当于 b = (a + b) - b, 则 b = a
            a = a - b;  // 相当于 a = (a + b) - a, 则a = b
            System.out.println("a="+a+", b="+b);
    
            // 方式4:一行代码搞定
            b = (a + b) - (a = b);
            System.out.println("a="+a+", b="+b);
        }
    

    相关文章

      网友评论

          本文标题:2018-06-20 逻辑运算符

          本文链接:https://www.haomeiwen.com/subject/gauxyftx.html