• 位运算练习


    编号 运算符 名称 示例 说明
    1 & x&y
    2 | x|y
    3 ~ 取反 ~x
    4 ^ 异或 x^y 不进位加法
    5 >> 右移 x>>y
    6 << 左移 x<<y
    7 >>> 无符号右移 x>>>y 左边填0
    ``` import java.util.Scanner;

    /**

    • Description:
    • 位运算练习
    • @date 2019/03/25 下午10:39:48
    • @author shuvidora
      */

    public class BitTest {
    /**
    * 第i位替换
    * @param n
    * @param m
    * @param i
    * @return 返回一个整数,该整数的第i位和m的第i位相同,其他位和n相同
    */
    static int bitManiputation1(int n, int m, int i) {
    return (n & (~(1 << i)) | ((m >> i) & 1) << i);
    }

    /**
     * 第i位取反,0^1=1,0^0=0;1^1=0,1^0=1. 构造一个整数,该整数的第i位是1,其余位都是0,然后与n进行异或运算
     * @param n
     * @param i
     * @return 返回值为一个整数,该整数的第i位是n的第i位取反,其余位和n相同
     */
    static int bitManiputation2(int n, int i) {
        return (1 << i) ^ n;
    }
    
    /**
     * 左边i位取反 0|x=0^x,x^x=0(x=0,1) 整型数值长32位,目标整数由两部分拼接而成: 左边i位是n的左边i位取反,考虑用1异或
     * 右边32-i位和n相同,不作变化,考虑用0异或 因此构造一个整数,该整数左边i位全为1,右边剩余的(32-i)位都为0
     * @param n
     * @param i
     * @return 返回一个整数,该整数的左边i位是n的左边i位取反,其余位和n相同
     */
    static int bitManiputation3(int n, int i) {
        return (~0x0 << (32 - i)) ^ n;
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        switch (args[0]) {
            case "1":
                int t1, n1, m1, i1;
                t1 = scanner.nextInt();
                while (t1-- > 0) {
                    n1 = scanner.nextInt();
                    m1 = scanner.nextInt();
                    i1 = scanner.nextInt();
                    System.out.println(bitManiputation1(n1, m1, i1));
                }
                break;
            case "2":
                int t2, n2, i2;
                t2 = scanner.nextInt();
                while (t2-- > 0) {
                    n2 = scanner.nextInt();
                    i2 = scanner.nextInt();
                    System.out.println(bitManiputation2(n2,i2));
                }
                break;
            case "3":
                int t3, n3, i3;
                t3 = scanner.nextInt();
                while (t3-- > 0) {
                    n3 = scanner.nextInt();
                    i3 = scanner.nextInt();
                    System.out.println(bitManiputation3(n3, i3));
                }
                break;
            default:
                System.out.println("No such case!");
                break;
        }
        scanner.close();
    }
    

    }

    >位运算作业: <http://cxsjsx.openjudge.cn/hw201901/statistics/>
  • 相关阅读:
    机器学习之路--Python
    机器学习之路--Pandas
    机器学习之路--seaborn
    机器学习之路--Matplotlib
    囫囵吞枣——SVG
    囫囵吞枣——XML
    囫囵吞枣——Jquery 笔记
    囫囵吞枣——JavaScript
    囫囵吞枣——CSS3
    囫囵吞枣——CSS笔记
  • 原文地址:https://www.cnblogs.com/xsjzhao/p/11203151.html
Copyright © 2020-2023  润新知