• 写一个函数返回参数二进制中1的个数


     8    二进制为:0000 1000=>  8/2=4   4/2=2  2/2=1(一的个数为1)
     11  二进制为:0000 1011=>  11/2=5...1   5/2=2...1  2/2=1(一的个数为3)
     31  二进制为:0001 1111=>  31/2=15...1  15/2=7...1  7/2=3...1  3/2=1...1  1/2=0(一的个数为5)
     26  二进制为:0001 1010=>  26/2=13    13/2=6.. .1  6/2=3   3/2=1...1   1/2=0(一的个数为3)

    发现规律:当一个整数多次除以二后,它的商和余数为一的个数就是整数对应二进制中1的个数

    1.这种方法只能实现对正整数的求法。

     1 #include<stdio.h>
     2 
     3 int count_one_bits(unsigned int value)
     4 {
     5     int count = 0;
     6     while (value / 2 != 0)
     7     {
     8         if (value % 2 == 1)
     9         {
    10             ++count;
    11             value = value / 2;
    12             if (value == 1)
    13             {
    14                 ++count;
    15                 continue;
    16             }
    17         }
    18         else
    19         {
    20             value = value / 2;
    21             if (value == 1)
    22             {
    23                 ++count;
    24                 continue;
    25             }
    26         }
    27     }
    28     return count;
    29 }
    30 
    31 int main()
    32 {
    33     int i;
    34     printf("请输入数字:
    ");
    35     scanf("%d", &i);
    36     int num = count_one_bits(i);
    37     printf("%d", num);
    38     return 0;
    39 }


    2.应用  <<  >>  移位的方法

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 
     4 int Count_one_bits(int a)
     5 {
     6     int count = 0;
     7     while (a!=0)
     8     {
     9         if (a & 1 == 1)
    10         {
    11             ++count;
    12             a = a >> 1;
    13         }
    14         else
    15         {
    16             a = a >> 1;
    17         }
    18     }
    19     return count;
    20 }
    21 
    22 int main()
    23 {
    24     //int c;
    25     //int b = 6; //0000 0110
    26     //int a = 11;//0000 1011
    27     //           //printf("%d
    ",a >> 1);//0000 0101 (5)
    28     //           //printf("%d
    ",a << 1);//0001 0110 (22)
    29     //c = a & b;//2   0000 0010
    30     //printf("%d", c);
    31     int a;
    32     printf("请输入数字:
    ");
    33     scanf("%d",&a);
    34     int count = Count_one_bits(a);
    35     printf("%d",count);
    36 
    37     return 0;
    38 }
  • 相关阅读:
    Zend Studio 9.0.2破解文件和注册码下载
    shell之netstat命令
    shell之arp命令
    Linux网络运维相关
    Linux静态ip设置及一些网络设置
    shell之进程
    shell之小知识点
    软连接与硬链接
    shell之dialog提示窗口
    Linux特殊权限位
  • 原文地址:https://www.cnblogs.com/cuckoo-/p/10354835.html
Copyright © 2020-2023  润新知