【JAVA】位运算

1. JAVA中的算术位移与逻辑位移

算术位移
1.算术左移 << : 0补低位
2.算术右移 >>: 正数0补高位,负数1补高位
逻辑位移
逻辑右移>>>: 不管正负,右移时都是0补高位
测试代码:

        // 测试算数左位移操作
        int Movednum = 10;
        System.out.println("Movednum = " + Integer.toBinaryString(Movednum));
        Movednum >>= 3;
        System.out.println("Movednum = " + Integer.toBinaryString(Movednum));
        Movednum >>= 31;
        System.out.println("Movednum = " + Integer.toBinaryString(Movednum));
        int Movednum2 = Integer.MAX_VALUE;
        System.out.println("Movednum2 = " + Integer.toBinaryString(Movednum2));
        Movednum2 >>= 31;
        System.out.println("Movednum2 = " + Integer.toBinaryString(Movednum2));
        System.out.println("测试负数算术移位");
        int Movednum3 = -10;
        System.out.println("Movednum3 = " + Integer.toBinaryString(Movednum3));
        Movednum3 >>= 3;
        System.out.println("Movednum3 = " + Integer.toBinaryString(Movednum3));
        Movednum3 >>= 32; // 溢出 —— 返回本身值
        System.out.println("Movednum3 = " + Integer.toBinaryString(Movednum3));
        int Movednum4 = Integer.MIN_VALUE;
        System.out.println("Movednum4 = " + Integer.toBinaryString(Movednum4));
        Movednum4 >>= 31;
        System.out.println("Movednum4 = " + Integer.toBinaryString(Movednum4));

        System.out.println("测试无符号右移");
        // 测试无符号右移
        int Movednum5 = -10;
        System.out.println("Movednum5 = " + Integer.toBinaryString(Movednum5));
        Movednum5 >>>= 3;
        System.out.println("Movednum5 = " + Integer.toBinaryString(Movednum5));

        System.out.println("测试左移");
        int Movednum6 = -10;
        System.out.println("Movednum6 = " + Integer.toBinaryString(Movednum6));
        Movednum6 <<= 3;
        System.out.println("Movednum6 = " + Integer.toBinaryString(Movednum6));

作为一个计算机专业的学生,看见位运算就想吐,觉得自己也是没救了

1. JAVA中的异或运算

异或运算 ^:异或(xor)是一个数学运算符,它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。其运算法则为: 如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。
例题
题目描述:求某十进制整数的反码
反码定义:二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 “101” 的二进制反码为 “010”。
思路:利用异或运算的特点,我们只需要将最高位的1以及其之后的每位都异或1,即可得到十进制整数的反码。
图解
在这里插入图片描述
代码

    public int bitwiseComplement(int n) {
        if(n == 0){
            return 1;
        }
        int bit = 0;
        // 找到最高位的1的前一位记录为bit
        for(int i=0; i<=30; i++){
            if(n < (1<<i)){
                bit = i;
                System.out.println("bit = " + bit);
                break;
            }
        }
        return n ^ ((1 << bit) - 1);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值