二进制位运算问题
问题描述:计算数n的二进制补码中有多少个1
import java.util.Scanner; public class Main { /** * 计算数n的二进制补码中有多少个1 * @param n * @return */ static int NumberOf1(int n) { int count = 0; while (n != 0) { count++; n = (n - 1) & n; } return count; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n; while (sc.hasNext()) { n = sc.nextInt(); System.out.println(NumberOf1(n)); } } }扩展问题:
1.判断一个整数是不是2的整数次方
(n-1)&n==0 返回true则表示是,否则表示不是
2.输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n
两步走:
1.将m与n进行异或运算(m^n)得到一个数,这个数有个特点:两个二进制数相同位置的数相同则这个数对应的位置为1,表示此位置需要一次改变。所以最后结果就是计算异或得到的这个数中有多少个1了。
2.计算异或得到的这个数中有多少个1即是要求的结果。