#include<stdio.h>
#include<iostream>
using namespace std;
int count_1(int num)
{
int count = 0;
int re = 0;
int div = 0;
if (num < 0)return 0;
div = num;
do
{
re = div % 2;
if (re == 1)
count++;
div = div / 2;
} while (div>0);
return count;
}
//保证既可以是正数也可以是负数
int count_11(int n)
{
int flag = 1;
int count = 0;
while (flag)
{
if (n&flag)
count++;
flag = flag << 1;
}
return count;
}
//把一个整数减1,再和原来的数与,会把该整数最右边的一个1变为0.那么一个整数的二进数有多少个1,就可以进行多少次这样的操作
int count_111(int n)
{
int count = 0;
while (n)
{
++count;
n = (n - 1)&n;
}
return count;
}//输入两个数M和N,计算需要改变M的二进制表示中的多少位才能得到N
//思路:首次两个数异或,就算异或的结果又多少个1
int tranfer(int M, int N)
{
int R = M^N;
int count = 0;
while (R)
{
++count;
R = (R - 1)&R;
}
return count;
}
void main()
{
int number = 0xf2;
int res = count_1(number);
int res1 = count_11(number);
int res3 = count_111(number);
int res4=tranfer(7,3);
cout << res<<"\n" <<res1<<"\n"<<res3<<"\n"<<res4<< endl;
system("pause");
}
#include<iostream>
using namespace std;
int count_1(int num)
{
int count = 0;
int re = 0;
int div = 0;
if (num < 0)return 0;
div = num;
do
{
re = div % 2;
if (re == 1)
count++;
div = div / 2;
} while (div>0);
return count;
}
//保证既可以是正数也可以是负数
int count_11(int n)
{
int flag = 1;
int count = 0;
while (flag)
{
if (n&flag)
count++;
flag = flag << 1;
}
return count;
}
//把一个整数减1,再和原来的数与,会把该整数最右边的一个1变为0.那么一个整数的二进数有多少个1,就可以进行多少次这样的操作
int count_111(int n)
{
int count = 0;
while (n)
{
++count;
n = (n - 1)&n;
}
return count;
}//输入两个数M和N,计算需要改变M的二进制表示中的多少位才能得到N
//思路:首次两个数异或,就算异或的结果又多少个1
int tranfer(int M, int N)
{
int R = M^N;
int count = 0;
while (R)
{
++count;
R = (R - 1)&R;
}
return count;
}
void main()
{
int number = 0xf2;
int res = count_1(number);
int res1 = count_11(number);
int res3 = count_111(number);
int res4=tranfer(7,3);
cout << res<<"\n" <<res1<<"\n"<<res3<<"\n"<<res4<< endl;
system("pause");
}