1.写一个函数,求a的二进制(补码)有多少个1
(1)第一种答案写法
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Count_Bit_One(unsigned int n)
{
int count = 0;
while (n)
{
if (n % 2 == 1)
{
count++;
}
n=n/2;
}
return count;
}
int main()
{
int a = 0;
scanf("%d", &a);
int count = Count_Bit_One(a);
printf("%d\n", count);
return 0;
}
(2) 第二种答案写法
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Count_Bit_One(int n)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (1 == ((n>>i)&1))
{
count++;
}
}
return count;
}
int main()
{
int a = 0;
scanf("%d", &a);
int count = Count_Bit_One(a);
printf("%d\n", count);
return 0;
}
(3)第三种答案写法,第三种是最好用的也是最高效的
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Count_Bit_One(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
int main()
{
int a = 0;
scanf("%d", &a);
int count = Count_Bit_One(a);
printf("%d\n", count);
return 0;
}
2.求二位数不同的个数
第二题答案
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Count_Bit_One(int m,int n)
{
int count = 0;
int tmp = m ^ n;
while (tmp)
{
tmp = tmp & (tmp - 1);
count++;
}
return count;
}
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m,&n);
int count = Count_Bit_One(m,n);
printf("%d\n", count);
return 0;
}
3.分别打印二进制位,所有奇数位和偶数位
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void Count_Bit_One(int m)
{
int i = 0;
printf("奇数位\n");
for (i = 30; i >= 0; i -= 2)
{
printf("%d", (m >> i) & 1);
}
printf("\n");
printf("偶数位\n");
for (i = 31; i >= 1; i -= 2)
{
printf("%d", (m >> i) & 1);
}
}
int main()
{
int m = 0;
scanf("%d", &m);
Count_Bit_One(m);
return 0;
}