2.1 二进制数中1的数目

代码:

#include <iostream>

using namespace std;

void main()
{
	int a = 12;
	int num = 0;
	while(1)
	{
		if(a!=0)
		{
			num++;
			a = a & (a-1);
		}
		else
			
			break;
	}
	cout<<num<<endl;
		
		
}

 给定另一个正整数A、B。问你把A变为B需要改变多少为?

#include <iostream>
#include <windows.h>
using namespace std;

void main()
{
	int a = 15;
	int b = 100;
	int num = 0;
	int c = 1;
	while(c)
	{
		if( (a%2) != (b%2) )
		{
			num++;
		}
		a = a/2;
		b = b/2;
	    c = a>b?a:b;
	}
	cout<<num<<endl;
}

 在做上一道题目时,我犯了一个错误,但是编译确实正确的,代码如下:

void main()
{
	int a = 15;
	int b = 100;
	int num = 0;
	int c = 1;
	while(c)
	{
		if( (a%2) != (b%2) )
		{
			num++;
		}
		a = a/2;
		b = b/2;
	    int c = a>b?a:b;
	}
	cout<<num<<endl;
}

 结果却是死循环。

原因是局部变量全局变量的结果。while(c)中的C是全局变量1,一旦进入while循环,就会被局部变量覆盖,因此变为了一个死循环。

posted @ 2012-07-31 13:38  CBDoctor  阅读(162)  评论(0)    收藏  举报