《剑指offer》面试题10 二进制中1的个数 Java版

书中方法一:对于每一位,用1求与,如果为1表明该位为1。一共要进行32次,int4字节32位。

	public int check(int a){
		int result = 0;
		int judge = 1;
		int count = 1;
		//左移31次,一共32位
		while(count <= 31){
			if((a & judge) == judge){
				result ++;
				judge <<= 1;
			}
			count ++;
		}
		return result;
	}

书中方法二:把一个整数减1,再和原来的整数做与运算,会把该整数二进制表示的最右边的一个1变为0

	public int check2(int a){
		int result = 0;
		while(a != 0){
			a = (a & (a-1));
			result++;
		}
		
		return result;
	}

扩展:一个二进制数如果是2的整数次方,那么这个数字的二进制表示中只有一位是1

posted @ 2019-09-30 10:13  CrazyJack  阅读(152)  评论(0)    收藏  举报