欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

写一个函数返回参数二进制中 1 的个数

程序员文章站 2022-07-15 10:02:18
...

1.写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:

int count_one_bits(unsigned int value)
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if (((value>>i) & 1) == 1)
		{
			count++;
		}
	}
	return count;
	// 返回 1的位数
}
int count_one_bits_2(unsigned int value)
{
	int count = 0;
	//奇数的第一位肯定是1
	while (value)
	{
		if (value % 2 == 1)
		{
			count++;
		}
		value /= 2;
	}
	return count;
}
int count_one_bits_3(unsigned int value)
{

}
int main()
{
	int n;
	printf("请输入一个整数>");
	scanf("%d", &n);
	get_two(n);

}

2.获取一个数二进制序列中所有的偶数位和奇数位,
分别输出二进制序列。

void print_binary_bit(int value)
{
	int i = 0;
	int arr1[16] = { 0 };//存放奇数位
	int arr2[16] = { 0 };//存放偶数位
	for (i = 0; i < 16; i++)
	{
		if ((value & 1) == 1)
			arr1[i] = 1;
		value = value >> 1;
		if ((value & 1) == 1)
			arr2[i] = 1;
		value = value >> 1;
	}
	for (i = 0; i < 16; i++)
	{
		printf("%d ", arr1[i]);
	}
	printf("\n");
	for (i = 0; i < 16; i++)
	{
		printf("%d ", arr2[i]);
	}

}
void print_binary_bit2(int value)
{
	for (int i = 31; i > 0; i -= 2)
	{
		printf("%d ", (value >> i) & 1);
	}
	printf("\n");
	for (int i = 30; i > 0; i -= 2)
	{
		printf("%d ", (value >> i) & 1);
	}
}
  1. 输出一个整数的每一二进制位。
void everloc(int value)
{
	int arr[32] = { 0 };
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if ((value & 1) == 1)
			arr[i] = 1;
		value = value >> 1;
	}
	for (i = 0; i < 32; i++)
	{
		printf("%d ", arr[i]);
	}
}

4.编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子 :
1999 2299
输出例子 : 7

int differ(int value1, int value2)
{
	int count = 0;
	int i = 0;
	int value;
	value = (value1^value2);
	for (i = 0; i < 32; i++)
	{
		if ((value&1) == 1)
			count++;
		value = value >> 1;
	}
	return count;
}
int main()
{
	int n,k;
	printf("请输入两个整数>");
	scanf("%d %d", &n,&k);
	printf("%d",differ(n,k));
}