代码:
#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循环,就会被局部变量覆盖,因此变为了一个死循环。