zoukankan      html  css  js  c++  java
  • 二进制中1的个数(十一)

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

    function NumberOf1(n){
        
        //当输入的为一个负数时
        //-123的二进制表示为-1111011 123的二进制表示为1111011  123的后面部分的补码0000101=122的正码 1111011按位取反
        //所以一个负数的二进制为 它的正数的二进制的负数  这个正数后面的补码 就等于 (这个正数-1)的正码按位取反 
        if(n<0){
            n=-n;//将负数变为正数
            n=n-1;//再将这个正数-1 因为这个正数减一取反 即为这个正数的补码 然后将这个正数的补码全部按位取反即得-123的补码表示
                  //因为一个负数的二进制是它的正数的二进制取反 
            //所以可以将这个负数变为正数 然后再-1  得到的二进制,就是正数的补码  然后将这个正数的补码全部按位取反即得-123的补码表示
            var str=(Array(32).join('0')+n.toString(2)).slice(-32);
            str=exchange(str);
        }else{
            var str=(Array(32).join('0')+n.toString(2)).slice(-32);
        }
    
        return cal(str);
    
    }
    
    /**
     * 计算1的个数
     */
    function cal(str){
        var count=0;
        for(var i=0;i<str.length;i++){
            if(str[i]==1){
                count++;
            }
        }
        return count;
    }
    
    //如果是负数,0变1,1变0
    function exchange(str){
        var arr=str.split('');
        for(var i=0;i<arr.length;i++){
            if(arr[i]==0){
                arr[i]=1;
            }else{
                arr[i]=0;
            }
        }
        str=arr.join('');
        return str;
    }
  • 相关阅读:
    poj 3087 直接模拟
    POJ-3126 BFS,埃式筛选及黑科技
    POJ3278-Catch That Cow
    js变量提升
    饿了么
    2分钟就能学会的【Google/百度搜索大法】了解一下?
    span标签间距
    Vue移动端项目如何使用手机预览调试
    Port 3000 is already in use
    koa2第一天 async详解
  • 原文地址:https://www.cnblogs.com/cmy1996/p/9601832.html
Copyright © 2011-2022 走看看