zoukankan      html  css  js  c++  java
  • 写一个函数返回参数二进制中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 }
  • 相关阅读:
    Rabbit官方文档翻译之Publish Subscribe(三)
    Maven项目导入本地Jar包
    位运算实现整数的加减乘数运算
    SpringMVC通过工具类获取Request域
    终止线程的2种方法。标记法和中断
    Spring 下默认事务机制中@Transactional 无效的原因
    java泛型 泛型的内部原理:类型擦除以及类型擦除带来的问题
    java.lang.Object.clone()分析
    我的Node.js学习历程
    setTimeout的妙用2——防止循环超时
  • 原文地址:https://www.cnblogs.com/cuckoo-/p/10354835.html
Copyright © 2011-2022 走看看