C语言操作符涉及的二进制序列问题

今天分享几个用C语言操作符解决的二进制序列问题

  1. 写一个函数返回参数二进制中 1 的个数
    比如: 15 0000 1111 4 个 1
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int count_one_bits(unsigned int val)
{
	int count = 0;
	for (int i = 1; i <= 32; i++)         //从右边的低位开始一位一位的将该二进制序列右移,然后和1做&运算就得到该位的数字。
	{
		if (((val >> (i - 1)) & 1) == 1)  //判断该位数字是否为1
			count++;
	}
	return count;
}
int main()
{
	unsigned int n;
	printf("请输入二进制序列:\n");
	scanf("%u",&n);
	printf("该二进制序列中1的个数为:%d个\n",count_one_bits(n));
	system("pause");
	return 0;
}

利用了1和任何数做&运算还是任何数的性质。

  1. 获取一个数二进制序列中所有的偶数位和奇数位,
    分别输出二进制序列。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void print(int n)
{//获取奇数位
	for (int i = 31; i >= 1; i-=2)       //从最高位开始右移,隔两位移一次
	{
		printf("%d ", (n >> i) & 1);
	}
	printf("\n");
  //获取偶数位
	for (int i = 30; i >= 0; i-=2)       //从最高位开始右移,隔两位移一次
	{
		printf("%d ", (n >> i) & 1);
	}
	printf("\n");
}
int main()
{
	int n;
	printf("请输入二进制序列:\n");
	scanf("%d",&n);
	print(n);
	system("pause");
	return 0;
}
  1. 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
    输入例子:
    1999 2299
    输出例子:7
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int get_difbits(int m,int n)
{
	int ret = m^n;                 //先将两个数的异或结果存到ret变量中,因为异或原则是“相同为0,不同为1”!
	int cnt = 0;
	for (int i = 1; i <= 32; i++)
	{
		if (((ret >> (i - 1)) & 1) == 1)    //再将次结果的每一位都和1做&运算看,有多少个1,就代表有多少个不同位。
			cnt++;
	}
	return cnt;
}
int main()
{
	int a, b;
	printf("请输入两个整数:\n");
	scanf("%d %d",&a,&b);
	printf("一共有%d个bit位不同\n",get_difbits(a, b));
	system("pause");
	return 0;
}
    所以说C语言中有不少操作符都是比较实用的,往往可以用他们更方便,更巧妙的解决一些问题。掌握这些操作符还是最基础的要求!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值