C语言之写一个函数求一个数的二进制(补码)表示中有几个1
2023-12-26 09:48:11
首先,我这里有三种方法。
一.
我们知道的是他是二进制数,我们可以一位一位的判断是不是1。这里,我们可以联想到在求一个十进制数的每一位用到的方法,先取模10,得到最后一位,再整除10去掉该位。所以,用到二进制数里面,我们就变成了%2和/2。
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int count_bit(unsigned int m)//注意这里是无符号
{
int count = 0;
while (m)
{
if (m % 2 == 1)
{
count++;
}
m /= 2;
}
return count;
}
int main()
{
int i = 0;
scanf("%d", &i);
int count = count_bit(i);
printf("%d", count);
return 0;
}
这里,我用-1为例测试?,结果为
二.
这里,跟第一种方法相差不大,只是这里我们用到了移位操作符>>。
若让一个数与1进行按位与操作,,则它的最后一个二进制位为1则得到1,为0得到0。
所以我们借助循环和>>与&这两个操作符,判断每一位是否为1。
代码如下:
int count_bit(int m)//这里就用有符号即可。
{
int count = 0;
for (int j = 0; j < 32; j++)//整形有32位
{
if ((m >> j && 1) == 1)
{
count++;
}
}
return count;
}
int main()
{
int i = 0;
scanf("%d", &i);
int count = count_bit(i);
printf("%d", count);
return 0;
}
三.
?第三种的精髓还是按位与&这个操作符。其实有种方法可以让一个数的二进制位中1一个一个的消除,不管它在哪儿,当然是从最低位开始。就是n&(n-1),大家可以试试。所以这里用while循环,当n二进制位全为0时停止循环,即n=0。
代码如下:
int count_bit(int m)
{
int count=0;
while (m)
{
m = m & (m - 1);
count++;
}
return count;
}
int main()
{
int i = 0;
scanf("%d", &i);
int count = count_bit(i);
printf("%d", count);
return 0;
}
至此,三种方法都已经介绍完,希望有帮助。
祝:“码”思泉涌,下“指”如有神。?
文章来源:https://blog.csdn.net/2301_79990723/article/details/135175220
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!