1.写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
将参数与1按位与,若结果为一,用一个参数记录,
最后返回记录参数。该参数即为所求。
#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 value = 0;
printf("请输入数字\n");
scanf_s("%d",&value);
printf("%d\n",count_one_bits(value));
system("pause");
}
2.获取一个数二进制序列中所有的偶数位和奇数位,
分别输出二进制序列。
先定义一个数组,再将输入的数按位与1与,将结果给数组(即将其转化为一个二进制数),最后将数组的奇数和偶数位输出,即为所输入数的二进制奇数,偶数数列。
int arr[32] = { 0 };
int main()
{
int number = 15;
printf("请输入二进制序列\n");
scanf_s("%d",&number);
for (int i = 0; i < 32; i++)
{
int b = 0x1;
if ((number >> i)& b)
{
arr[i] = 1;
}
else
{
arr[i] = 0;
}
}
for ( int i = 31; i > 0;i = i - 2)
{
printf("%d",arr[i]);
}
printf("\n");
printf("上面是偶数列,下面是奇数列\n");
for (int i = 30; i >= 0; i = i - 2)
{
printf("%d", arr[i]);
}
printf("\n");
system("pause");
}
3 输出一个整数的每一位。
用函数的递归,每一次都将其%10.并输出。
#include<stdio.h>
#include<stdlib.h>
int cout(int num)
{
if (num < 10)
return num;
else
{
int n = 0;
n = num % 10;
printf("%d\n",n);
cout(num / 10);
}
}
int main()
{
int a = 123;
printf("请输入一个整数\n");
scanf_s("%d",&a);
printf("%d\n",cout(a));
system("pause");
}
4.编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
将俩个数按位异或,然后在将得到的数与1按位与。得出结果中1的个数
就是这俩个整数不通位的个数
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
printf("请输入俩个数\n");
scanf_s("%d",&a);
scanf_s("%d",&b);
for (int i = 0; i <= 32;i++)
{
if ((((b ^ a) >> i) & 0x1) == 1)
c++;
}
printf("%d\n",c);
system("pause");
}