Java 位运算的解读 & | ^ ~ << >>

发布时间 2023-10-08 12:02:57作者: 修炼诗人

Java中的位运算包括以下几种:

  按位与(&):对应位上,如果两个数都是1,则结果为1,否则为0。

    int a = 3; // 二进制 0011
    int b = 5; // 二进制 0101
               //    0001 = 1
    System.out.println("a & b = " + (a & b));

  按位或(|):对应位上,如果两个数有一个为1,则结果为1,否则为0。

        int a = 3; // 二进制 0011
        int b = 5; // 二进制 0101
                    //       0111 = 7
        System.out.println("a | b = " + (a | b));

  按位异或(^):对应位上,如果两个数不相同,则结果为1,否则为0。

        int a = 3; // 二进制 0011
        int b = 5; // 二进制 0101
                    //      0110 = 6
        System.out.println("a ^ b = " + (a ^ b));

  按位取反(~):对每一位,将0变为1,将1变为0。

        // ~ 的运算规则:
        // ~0 = -1
        // ~1 = -2
        // ~2 = -3
        // ~3 = -4
        // 因此,~3 = 1100 = -4
        int a = 3; // 二进制 0011
                    //      1100 = -4
        // a + ~a = -1  ,等于 1111 
        // 1111 + 1 = 0000 = 0
        System.out.println("~a= " + (~a));        

   左移(<<):将二进制数向左移动指定位数,右边用0填充。

        int b = 5; // 二进制 0101
                    //      1010 = 10   b << 1
                    //     10100 = 20   b << 2
        System.out.println("b << 2 " + (b << 1));        

  右移(>>):将二进制数向右移动指定位数,左边用符号位填充。