import java.util.Scanner;
public class One_2 {
static int N = 10000000; //N设定可放置1000万整数
static int B = 32; //int为4个字节,即32位
static int S = 5; //32为2的5次方,位移量为5
static int M = 0x1F;//00011111,32-1的原码表示
static int[] msg = new int[N/B+1]; //用msg整型数组模拟1000万位的数
public static void set(int i){
msg[i>>S] |= 1<<(i&M);//i>>S相当于i/32,用来确定i在数组的第几个整数。i&M相当于对32求余,判断i位于第几位,并将该位置1。
}
public static void clear(int i){
msg[i>>S] &= ~(1<<(i&M));
}
public static void main(String [] args){
for(int i = 0;i<N;i++){//清空msg
clear(i);
}
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
set(scan.nextInt());
}
}
}
编程珠玑 | 第一章习题 2.如何使用位逻辑运算(如与、或、移位)来实现位向量? java语言
最新推荐文章于 2021-04-26 21:38:55 发布