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 }

    运行测试

      

    小结

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

  • 相关阅读:
    drf—— 序列化组件
    drf—— RESTful API规范
    drf——APIView及其内部函数/类的源码分析
    drf—— drf的安装和使用
    226翻转二叉树
    51,N皇后
    557反转字符串中的单词III
    17.电话号码的字母组合
    459重复的子字符串
    419递增子序列
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3656161.html
Copyright © 2011-2022 走看看