信息发布→ 登录 注册 退出

Java中的位运算符全解

发布时间:2026-01-11

点击量:
目录
  • 1. &(按位与运算符)
  • 2. |(按位或运算符)
  • 3. ^(异或运算符)
  • 4. <<(左移运算符)
  • 5. >> (右移移运算符)
  • 6. ~(取反运算符)
  • 7. >>>(无符号右移运算符)
    • (1) 正数无符号右移
    • (2) 负数无符号右移
  • 总结

    1. &(按位与运算符)

    &按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真):1&1=1 , 1&0=0 , 0&1=0 , 0&0=0

    public class Main {
        public static void main(String[] args) {
            // &按位与,运算符两边的条件值会先转换为2进制,然后再比对运算
            /**
             *   0 0 1 1  
             *   0 1 0 1
             *  ----------- 
             *   0 0 0 1
             */
            int a = 3&5;
            /**
             *   0 0 0 1
             *   0 0 1 0
             *  ----------- 
             *   0 0 0 0
             */
            int b = 1&2;
            System.out.println(a);// 1
            System.out.println(b);// 0
        }
    }
    

    2. |(按位或运算符)

    |按位或和&按位与计算方式都是转换二进制再计算,不同的是运算规则(一个为真即为真):1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1

    public class Main {
        public static void main(String[] args) {
            // |按位或,运算符两边的条件值会先转换为2进制,然后再比对运算
            /**
             *   0 0 1 1
             *   0 1 0 1
             *  -------------
             *   0 1 1 1
             */
            int a = 3|5;
            /**
             *   0 0 0 1
             *   0 0 1 0
             *  -------------
             *   0 0 1 1
             */
            int b = 1|2;
            System.out.println(a);// 7
            System.out.println(b);// 3
        }
    }
    

    3. ^(异或运算符)

    ^异或运算符顾名思义,异就是不同,其运算规则为1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0

    public class Main {
        public static void main(String[] args) {
            /**
             *   0 0 1 1
             *   0 1 0 1
             *  -------------
             *   0 1 1 0
             */
            int a = 3^5;
            /**
             *   0 0 0 1
             *   0 0 1 0
             *  -------------
             *   0 0 1 1
             */
            int b = 1^2;
            System.out.println(a);// 6
            System.out.println(b);// 3
        }
    }
    

    4. <<(左移运算符)

    5<<2的意思为5的二进制位往左挪两位,右边补0

    5的二进制位是0000 0101 , 就是把有效值101往左挪两位就是0001 0100 ,正数左边第一位补0,负数补1,等于乘于2的n次方,十进制位是5*2^2=20

    public class Main {
        public static void main(String[] args) {
            /**
             * 5<<2的意思为5的二进制位往左挪两位,右边补0
             *  0 0 0 0 0 1 0 1
             *  0 0 0 1 0 1 0 0
             */
            System.out.println(5<<2); // 20
        }
    }
    

    5. >> (右移移运算符)

    凡位运算符都是把值先转换成二进制再进行后续的处理

    5的二进制位是0000 0101,右移两位就是把101左移后为0000 0001,正数左边第一位补0,负数补1,等于除于2的n次方,结果为1

    public class Main {
        public static void main(String[] args) {
            /**
             * 5>>2的意思为5的二进制位往右挪两位,左边补0
             *  0 0 0 0 0 1 0 1
             *  0 0 0 0 0 0 0 1
             */
            System.out.println(5<<2); // 1
        }
    }
    

    6. ~(取反运算符)

    取反就是1为0,0为1

    5的二进制位是0000 0101,取反后为1111 1010,值为-6

    public class Main {
        public static void main(String[] args) {
            /**
             *     0 0 0 0 0 1 0 1
             *   ---------------------  
             *     1 1 1 1 1 0 1 0
             *  
             *  1、如果 11111010 想转为负的十进制,因为最高位是1,所以先将11111001减1得到11111001
             *  2、取反 00010101,然后计算出 00000100 对应的十进制为6
             *  3、所以 11111010 最终对应的十进制为 -6
             *  
             *     1 1 1 1 1 0 1 0
             *   - 0 0 0 0 0 0 0 1
             *   ---------------------
             *     1 1 1 1 1 0 0 1
             *   ---------------------
             *     0 0 0 0 0 1 0 0
             */
            System.out.println(~5); // -6
        }
    }
    

    7. >>>(无符号右移运算符)

    (1) 正数无符号右移

    无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0。

    15的二进制位是0000 1111 , 右移2位0000 0011,结果为3

    public class Main {
        public static void main(String[] args) {
            /**
             *     0000 1111
             *   --------------- 
             *     0000 0011
             */
            System.out.println(15>>>2); // 3
        }
    }
    

    (2) 负数无符号右移

    -6的二进制是6的二进制取反再加1,6的二进制也就是0000 0000 0000 0000 0000 0000 0000 0110,取反后加1为1111 1111 1111 1111 1111 1111 1111 1010,右移三位0001 1111 1111 1111 1111 1111 1111 1111

    public class Main {
        public static void main(String[] args) {
            System.out.println(-6>>>3); // 536870911
        }
    }
    

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容! 

    在线客服
    服务热线

    服务热线

    4008888355

    微信咨询
    二维码
    返回顶部
    ×二维码

    截屏,微信识别二维码

    打开微信

    微信号已复制,请打开微信添加咨询详情!