【JAVA】位运算

【JAVA】位运算,第1张

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);
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/3002206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存