二进制的移位操作

版权声明:Zhining https://blog.csdn.net/weixin_43214609/article/details/83244206

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

可以用'&1' '^1'和'>>'来二进制的操作实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int count_one_bits(unsigned int value)
{
	int count = 0;
	while(value)
	{
		if (value&1)
			count++;
		value>>=1 ;
	}
	return count;
}

int main()
{
	unsigned int value = 5;
	int ret = count_one_bits(value);
	printf("%d二进制里1的个数为%d。\n", value,ret);
	system("pause");
	return 0;
}

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

void print(int arr[])
{
	for (int i = 0; i < 16; i++)
	{
		printf("%d", arr[i]);
	}
	printf("\n");
}

int count_bits(int num)
{
	int a[20] = { 0 };
	int b[20] = { 0 };
	int arr[40] = { 0 };

	for (int i = 0, j = 0; j < 32; i++, j ++)
	{
		arr[31 - i] = (num >> j) & 1;
	}
	printf("二进制位为:\n");
	for (int i = 0; i < 32; i++)
	{
		printf("%d", arr[i]);
	}
	printf("\n");

	for (int i = 0, j = 0; j < 32; i++, j += 2)
	{
		a[15 - i] = (num >> j) & 1;
	}
	printf("偶数位为:\n");
	print(a);

	for (int i = 0, j = 1; j < 32; i++, j += 2)
	{
		b[15 - i] = (num >> j) & 1;
	}
	printf("奇数位为:\n");
	print(b);
}

int main()
{
	int num = 15;
	count_bits( num);
	system("pause");
	return 0;
}

3.两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 

void print(int arr[])
{
			printf("二进制位为:\n");
			for (int i = 0; i < 32; i++)
			{
				printf("%d", arr[i]);
			}
			printf("\n");
}

int cmp_bits(n1,n2)
{
	int a[40] = { 0 };
	int b[40] = { 0 };

	for (int i = 0, j = 0; j < 32; i++, j++)
	{
		a[31 - i] = (n1 >> j) & 1;
	}

	for (int i = 0, j = 0; j < 32; i++, j++)
	{
		b[31 - i] = (n2 >> j) & 1;
	}
	printf("n1:");
	print(a);
	printf("n2:");
	print(b);
	int count = 0;
	for (int i = 0; i < 32; i++)
	{
		if (a[i] != b[i])
		{
			count++;
		}
	}
	return count;
}

int main()
{
	int n1 = 1999, n2 = 2299;
	int ret = cmp_bits(n1, n2);
	printf("有%d位不一样", ret);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43214609/article/details/83244206