写一个函数返回参数二进制中1的个数(三种方法)

来源:互联网 发布:javascript 获取位置 编辑:程序博客网 时间:2024/06/06 19:49
/*方法一是最容易想到的,但是如果输入的是负数的话,那么程序就会陷入死循环  */int Numberfor1(void){    int num = 0;         int count = 0;    printf("请输入一个整数:");    scanf_s("%d", &num);    while (num)    {        if (num & 1)        {            count++;        }        num = num >> 1;    }    printf("%d\n", count);    return 0;}/*方法2:每次num和1位与运算和,‘1’左移1位。这样就不会出现输入负数就会死循环的情况。但这种方法效率较低(有多少二进制位就要循环多少次)*/int Numberfor2(void){    int count = 0;    int tool = 1;    int num = 0;    printf("请输入一个整数:");    scanf_s("%d", &num);    while (tool)    {        if (num & tool)        {            count++;        }        tool = tool << 1;    }    printf("%d\n", count);    return 0;}/*最佳方法:利用num和(num-1)做位与运算,效率更高(二进制位中有多少个‘1’,就循环多少次)。*/int Numberfor3(void){    int num = 0;    int count = 0;    printf("请输入一个整数:");    scanf_s("%d", &num);    while (num)    {        num = (num - 1) & num ;        count++;    }    printf("%d\n",count);    return 0;
阅读全文
0 0
原创粉丝点击