Java位运算符和移位运算符详解

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。
移位运算符包括,“左移运算符”,“有符号右移运算符”、“无符号右移运算符”。



位运算

  1. 异或 ^
    异或运算符是用符号“^”表示的,其运算规律是:
    两个操作数的位中,相同则结 果为0,不同则结果为1

    简单实例

    /**
     * @function: 异或位运算
     */
    @Test
    public void test(){
        int a=33;
        int b=32;
        System.out.println(a^b);
    }
    

    输出结果:1
    因为33转换成二进制是100001,32转换成二进制是100000,异或结果是000001

    拓展:异或的应用

    第一:简单的加密解密
    因为a ^ b ^ b = a

    第二:高效率交换两个整数

    /**
     * @function: 使用异或,高效率交换两个整数
     */
    @Test
    public void test2(){
        int a=100;
        int b=88;
    
        //使用异或交换
        a=a^b;
        b=a^b;
        a=b^a;
    
        System.out.println(a);
        System.out.println(b);
    }
    

    运行结果:
    在这里插入图片描述
    其实两个应用道理是相同的,一个数异或另一个数两次得到的还是他本身



  1. 与 &
    与运算符用符号“&”表示,其使用规律如下:
    两个操作数中位都为1,结果才为1,否则结果为0

    简单实例

    /**
     * @function: 与位运算
     */
    @Test
    public void test3(){
        int a=33;
        int b=32;
        System.out.println(a&b);
    }
    

    运行结果:32
    因为因为33转换成二进制是100001,32转换成二进制是100000,与结果是100000

  2. 或 |
    或运算符用符号“|”表示,其运算规律如下:
    两个位只要有一个为1,那么结果就是1,否则就为0

    简单实例

    /**
     * @function: 或位运算
     */
    @Test
    public void test4(){
        int a=33;
        int b=32;
        System.out.println(a|b);
    }
    

    运行结果:33
    因为因为33转换成二进制是100001,32转换成二进制是100000,或结果是100001

  3. 非 ~
    非运算符用符号“~”表示,其运算规律如下:
    如果位为0,结果是1,如果位为1,结果是0

    简单实例

    /**
     * @function: 非位运算
     */
    @Test
    public void test5(){
        int a=33;
        int b=~a;
        System.out.println(b);
        System.out.println(Integer.toBinaryString(b));
    }
    

    运行结果:
    在这里插入图片描述

移位运算

移位运算操作的就是二进制的位
在这里插入图片描述
简单的,<<n 左移相当于乘2的n次方,>>n(>>>n) 右移相当于除2的n次方,然后这个>>>与>>的区别是对负数的处理上

简单示例

	/**
     * @function: 移位运算
     */
    @Test
    public void test6() {
        int a = 32;
        int b = -32;
        System.out.println(Integer.toBinaryString(a));
        System.out.println(Integer.toBinaryString(b));
        System.out.println(Integer.toBinaryString(a >> 2));
        System.out.println(Integer.toBinaryString(b >> 2));
        System.out.println(Integer.toBinaryString(a >>> 2));
        System.out.println(Integer.toBinaryString(b >>> 2));
        System.out.println(Integer.toBinaryString(a << 2));
        System.out.println(Integer.toBinaryString(b << 2));
    }

运行结果
在这里插入图片描述

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值