位运算
简介
位运算一般为二进制的位运算,根据某一位是0还是1进行计算。
例题 二进制中1的个数
给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。
import java.util.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
class Reader{
static BufferedReader buffer;
static StringTokenizer token;
static void init(InputStream input){
buffer = new BufferedReader(new InputStreamReader(System.in));
token = new StringTokenizer("");
}
static String next()throws IOException{
while(!token.hasMoreTokens()){
token = new StringTokenizer(buffer.readLine());
}
return token.nextToken();
}
static int nextInt()throws IOException{
return Integer.parseInt(next());
}
}
public class Main{
public static int lowbit(int x){
return x&(-x);
}
public static void main(String[] args)throws IOException{
Reader.init(System.in);
int n = Reader.nextInt();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < n; i++){
int temp = Reader.nextInt();
int ans = 0;
while(temp != 0){
temp -= lowbit(temp);
ans++;
}
sb.append(ans);
sb.append(" ");
}
System.out.print(sb.toString());
}
}
lowbit函数
lowbit函数每次返回的是二进制中从右向左第一个为1的为和后续位的值
例如 111001000 做lowbit计算,返回1000
10010010 做lowbit计算 返回10
lowbit计算的具体实现如下
public static int lowbit(int x){
return x&(-x);
}//原理仔细想想就可以想明白
将一个十进制整数通过二进制字符串表现出来
public static String tran(int x){
StringBuilder sb = new StringBuilder();
for(int i = 0; x != 0; i++){
x= x >> i;
sb.append(x & 1);
}
return sb.reverse().toString();
}