二进制位运算以及扩展问题

来源:互联网 发布:守望先锋生涯数据消失 编辑:程序博客网 时间:2024/05/27 16:42

二进制位运算问题


问题描述:计算数n的二进制补码中有多少个1


Java源码:
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即是要求的结果。

0 0
原创粉丝点击