位运算专题

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//写一个函数,返回参数二进制中的1的个数

int count_one_bits(unsigned int value)
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if ((value & 1) == 1)
		{
			count++;
			value >>= 1;
		}
	}
	return count;
}


int main()
{
	int num = 0;
	printf("请输入一个无符号整数:");
	scanf("%d", &num);
	int ret = count_one_bits(num);
	printf("%d的二进制中1的个数为%d\n", num, ret);
	system("pause");
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
//获取一个数二进制序列中所有的偶数位和奇数位

void Even(int num)//偶数序列
{
	int arr[16] = { 0 };
	int i = 0, j = 0;
	for (i = 0; i < 32; i+=2)
	{
		arr[15 - j] = (num >> i) & 1;//从后向前存储
		j++;
	}
	printf("偶数位序列是:\n");
	for (i = 0; i < 16; i++)
	{
		printf("%d", arr[i]);
	}
	printf("\n");
}

void Odd(num)//奇数序列
{
	int arr[16] = { 0 };
	int i = 0, j = 0;
	for (i = 1; i < 32; i += 2)
	{
		arr[15 - j] = (num >> i) & 1;//从后向前存储
		j++;
	}
	printf("奇数位序列是:\n");
	for (i = 0; i < 16; i++)
	{
		printf("%d", arr[i]);
	}
	printf("\n");
}


int main()
{
	int num = 0;
	printf("请输入一个整数:");
	scanf("%d", &num);
	Even(num);
	Odd(num);
	system("pause");
	return 0;
}

3.输出一个整数的每一位

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
//输出一个整数的每一位

void Binary(int num)
{
	int i = 0;
	int arr[32] = { 0 };
	for (i = 0; i < 32; i++)
	{
		arr[31-i] = (num >> i) & 1;
	}
	for (i = 0; i < 32; i++)
	{
		printf("%d", arr[i]);
	}
}

int main()
{
	int num = 0;
	printf("请输入一个整数:");
	scanf("%d", &num);
	Binary(num);
	system("pause");
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
//两个整数的二进制中,有多少位不同
int Diffbit(int num1,int num2)
{
	int count = 0;
	int a = num1^num2;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if ((a >> i) & 1 == 1)
		{
			count++;
		}
	}
	return count;

}

int main()
{
	int num1 = 0, num2 = 0;
	printf("请输入两个整数:");
	scanf("%d %d", &num1, &num2);
	int ret = Diffbit(num1, num2);
	printf("两个数有%d个不同位\n", ret);
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值