#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> 方法一:此方法效率低 int count_one_bits(unsigned int value) { int count = 0; int tamp; int i; tamp = value; for(i=0;i<32;i++) { if((value>>i) & 1 == 1) count++; } return count;// 返回 1的位数 } int main() { int value = 0; int count = 0; printf("请输入数值:\n"); scanf("%d",&value); count = count_one_bits(value); printf("%d的二进制数中1的个数为->%d\n",value,count); system("pause"); return 0; } 方法二:(注意:要用此方法,函数的形参类型 必须是unsigned int,不然只能算正数) int count_one_bits(unsigned int value) { int count = 0; int tamp; tamp = value; while (value) { if (value % 2 == 1) { count++; } value = value / 2; } return count;// 返回 1的位数 } int main() { int value = 0; int count = 0; printf("请输入数值:\n"); scanf("%d",&value); count = count_one_bits(value); printf("%d的二进制数中1的个数为->%d\n",value,count); system("pause"); return 0; } 方法三: 比如num=15 00000000000000000000000000001111 num 00000000000000000000000000001110 num-1 num & num-1 = 00000000000000000000000000001110 num 00000000000000000000000000001101 num-1 num & num-1 = 00000000000000000000000000001100 num 00000000000000000000000000001011 num-1 num & num-1 = 00000000000000000000000000001000 num 00000000000000000000000000000111 num-1 num & num-1 = 00000000000000000000000000000000 总共与了4次后,num & num-1 等于0,最初的num有4个1 int count_one_bits(int value) { int count = 0; while (value) { value =value & (value - 1); count++; } return count; } int main() { int value = 0; int count = 0; printf("请输入数值:\n"); scanf("%d",&value); count = count_one_bits(value); printf("%d的二进制数中1的个数为->%d\n",value,count); system("pause"); return 0; }
总结:写一个函数返回参数二进制中 1 的个数
猜你喜欢
转载自blog.csdn.net/jsbgo201506010102/article/details/79776417
今日推荐
周排行