zoukankan      html  css  js  c++  java
  • 面试题八 二进制中 1 的个数

    题目

      请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。

    分析

      首先要明白:一个整数和它减去 1 的结果做与运算,相当于把它最右边的 1 变成 0

      这样可以用一个循环程序解决这个问题,每次循环都让整数和它减去 1 的结果做或运算,循环判定该数是否为 0 ,这样,循环的次数即是该数中有 1 变成 0 的次数,也即该数中 1 的个数。

    代码实现

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int numberOf1(int n) {
     6     int count = 0;
     7 
     8     while (n) {
     9         ++count;
    10         n = (n-1) & n;
    11     }
    12 
    13     return count;
    14 }
    15 
    16 int main()
    17 {
    18     int n;
    19     cout << "请输入要判断的整数:" << endl;
    20     cin >> n;
    21 
    22     int result = numberOf1(n);
    23 
    24     cout << "整数 " << n << " 的二进制表示中有 " << result << " 个为 1 的位" << endl;
    25 
    26     return 0;
    27 }

    运行测试

      

    小结

      注意区分正整数移位和负整数移位的区别。

  • 相关阅读:
    记录。短信网关.
    TP 笔记~
    FUCK IE FLASH(inline hook)
    API HOOK(MessageBoxA)
    inline hook MessageBox(2)
    c#线程中使用 dataset
    匈牙利算法解决二分图最大匹配
    C#:Array类的排序
    C#:属性
    C#:结构
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3656161.html
Copyright © 2011-2022 走看看