1.写一个函数返回参数二进制中1的个数
比如:15 0000 1111 4个1
思路,一个整形参数最多有32个1,通过循环和移位操作符来判断其每一项是否都为1。
int count_one_bits(unsigned int value)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((value >> i) & 1) == 1)//通过循环右移操作来判断其二进制的每位数是否都为1
{
count++;
}
}
return count;
}
2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
思路,首先分为奇偶两种情形处理,然后通过对2取余来获取这项的数字信息。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num = 0;
int i = 0;
int j = 0;
int n = 0;
scanf("%d", &n);
num = n;
printf("奇数位为\n");
while (num)
{
i = num % 2;
num = num >> 2;
printf("%2d", i);
}
printf("\n");
num = n >> 1;
printf("偶数位为\n");
while (num)
{
j = num % 2;
num = num >> 2;
printf("%2d", j);
}
system("pause");
return 0;
}
3.输出一个整数的每一位。
思路,通过递归的手段可以简单的提出每一位数并打印出来。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void print(int n)
{
if (n > 9)
{
print(n / 10);//递归
}
printf("%2d", n % 10);
}
int main()
{
int num = 0;
scanf("%d", &num);
print(num);
system("pause");
return 0;
}
4.编程实现:
两个int(32位)整数m和n的二进制表达式中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
思路,由于按位异或的性质,先将m和n两数进行按位异或,
然后通过得到新数的二进制中1的个数即是所需的结果。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((value >> i) & 1) == 1)
{
count++;
}
}
return count;
}
int main()
{
int m = 0;
int n = 0;
int t = 0;
int count = 0;
scanf("%d %d", &m ,&n);
t = m ^ n;
count = count_one_bits(t);
printf("%d", count);
system("pause");
return 0;
}