zoukankan      html  css  js  c++  java
  • 8、二进制中1的个数------------>剑指offer系列

    题目

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    法一:分析

    这是一道考察二进制的题目

    二进制或运算符(or):符号为|,表示若两个二进制位都为0,则结果为0,否则为1

    二进制与运算符(and):符号为&,表示若两个二进制位都为1,则结果为1,否则为0

    二进制否运算符(not):符号为~,表示对一个二进制位取反。

    异或运算符(xor):符号为^,表示若两个二进制位不相同,则结果为1,否则为0

    左移运算符m << n 表示把m左移n位,左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n0,比如:

    00001010<<2 = 00101000

    右移运算符m >> n 表示把m右移n位,右移n位的时候,最右边的n位将被丢弃,同时在最左边补上n0,比如:

    00001010>>2 = 00000010

    我们可以让目标数字和一个数字做与运算

    这个用户比较的数字必须只有一位是1其他位是0,这样就可以知道目标数字的这一位是否为0

    所以用于比较的这个数字初始值为1,比较完后让1左移1位,这样就可以依次比较所有位是否为1

    代码

    function NumberOf1(n)
    {
        let flag = 1;
        let count = 0;
        while(flag){
            if(flag & n){
                count++;
            }
           flag = flag << 1;
        }
        return count;
    }
    

     法二:分析

  • 相关阅读:
    请问set JAVA_OPTS的各项參数是什么意思?
    微软正式提供Visual Studio 2013正式版下载(附直接链接汇总)
    基础总结篇之中的一个:Activity生命周期
    [Cocos2d-x]Mac下cocos2d-x连接pomeloserver
    window.location.href的使用方法
    springMVC简单实例
    mybatis快速入门
    出现传值问题
    el表达式判断字符串相等
    EL表达式
  • 原文地址:https://www.cnblogs.com/QianDingwei/p/10923995.html
Copyright © 2011-2022 走看看