本文主要是介绍输入一个整型变量,求它二进制位中含有1的个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(1)这种方法虽然简单,但是存在明显缺陷,当输入的数为负数时,显然结果不正确。
#include <stdio.h>
int main()
{int num = 0;int count = 0;printf("输入一个数:");scanf_s("%d", &num);while (num != 0){if (num % 2 == 1){count++;}num = num / 2;}printf("count=%d\n", count);return 0;
}
2.按位与&操作符,两数二进制序列同位同一出一,其余出零.拿这个数与一按位与,这样就可以判断哪一位为一,哪一位为零.
#include<stdio.h>
int main()
{int num;int count = 0, i = 32;printf("请输入一个数字:");scanf_s("%d", &num);while (i--){if ((num & 1) == 1)//按位与&,同为1时出1 {count++;}num = num >> 1;//右移1位,相当于num/2 }printf("输出数字在二进制中 1 的个数:");printf("%d\n", count);return 0;
}
3.举个例子,输入9,它的二进制为1001(实际应该在内存中以32位存在),8的二进制为1000,那么它们的二进制序列按位与的结果为1000,而7的二进制序列为0111,二者按位与的结果为0000,循环终止,count自加两次,所以输出count的值为2,正确.
#include <stdio.h>
int main()
{int num = 0;int count = 0;printf("输入一个数:");scanf_s("%d", &num);while (num != 0){count++;//将它与它相邻的数按位与num = num&(num - 1);}printf("count=%d\n", count);return 0;
}
这篇关于输入一个整型变量,求它二进制位中含有1的个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!