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");
}