zoukankan      html  css  js  c++  java
  • 二进制中有多少个1 .

    二进制中有多少个1

    计算在一个 32 位的整数的二进制表式中有多少个 1.

    样例

    给定 32 (100000),返回 1

    给定 5 (101),返回 2

    给定 1023 (111111111),返回 9

    首先第一种思路,也是给的整数无符号时的解法:

    主要思路是将二进制数的最低位加入sum,然后右移一位。

     1 public class Solution {
     2     /**
     3      * @param num: an integer
     4      * @return: an integer, the number of ones in num
     5      */
     6     public int countOnes(int num) {
     7         int sum = 0;
     8         while(num != 0){
     9             sum += num % 2;
    10             num = num / 2;
    11         }
    12         return sum;
    13     }
    14 };
    View Code

    然而给出的并不是无符号数。

    若给-1(FFFF FFFFH) 则会输出-1;

    设x = x31x30x29...xa1000..0 xa之后的1为从低位开始的第一个1。

    x - 1 = x31x30x29...xa0111111..1 。

    因此 x&(x-1) = x31x30x29...xa000...0 。

    这样就找到了最低位的一个1并且将它置为0。

    循环至x == 0,至此二进制数中所有的1都被找出来了.

     1 public class Solution {
     2     /**
     3      * @param num: an integer
     4      * @return: an integer, the number of ones in num
     5      */
     6     public int countOnes(int num) {
     7         // write your code here
     8         int sum = 0;
     9         while(num != 0){
    10             num = num & (num - 1);
    11             sum++;
    12         }
    13         return sum;
    14     }
    15 };
    View Code
  • 相关阅读:
    正则表达式基础以及应用
    日常使用之css篇
    echarts的使用总结
    &#65279导致页面顶部空白一行
    vue.js单页面应用实例
    BFC的外边距折叠
    .net 跳出Frameset框架
    Cache缓存使用
    Kafka集群搭建及安全机制手册
    PHP学习笔记
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5020369.html
Copyright © 2011-2022 走看看