施进超

导航

位运算练习

编号 运算符 名称 示例 说明
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/>

posted on 2019-07-17 19:26  jinzhaoshi  阅读(337)  评论(1编辑  收藏  举报