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

C语言位运算

程序员文章站 2022-07-15 08:51:59
...

位运算对于初学者来说是C语言中的难点内容,除了我们所熟知的算法之外,有时用位运算的算法,会使计算过程简便很多,这里总结了一些位运算的例题:

写一个函数返回参数二进制中1的个数
 法一:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int n)
{
	
	int count = 0;
	while (n != 0)
	{
		n = n&(n - 1);//用n和(n-1)按位与,每一次的值再给n,计算n的二进制位1的个数
		count++;//每次按位与之后count自增
	}
	return count;//返回count的值
}
int main()
{
unsigned	int n = 0;//无符号整形
	scanf("%d", &n);
	printf("%d", count_one_bits(n));
	system("pause");
}
法二:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int  count_one_bits1(unsigned int n)//不加unsigned就不能算负数,因为负数右移左边补1
{
	int count = 0;
	while (n != 0)
	{
		if (n % 2 == 1)
		{
			count++;
		}
		n=n >> 1;
	}
	return count;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", count_one_bits1(n));
	system("pause");
}
法三:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int  count_one_bits2( int n)
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)//控制循环次数
	{
		if (((n >> i) & 1) == 1)//判断n右移i位后和1与的值是否为1
		{
			count++;
		}
	}
	return count;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", count_one_bits2(n));
	system("pause");
}