• 面试题15:二进制中1的个数


    这个题目考察的是计算机基础知识。注意int型的-1在计算机中的二进制存储为补码0xFFFF FFFF,但是计算机在展示给我们的时候,是作为原码展示。

    C++版

    #include <iostream>
    using namespace std;
    
    int NumberOf1Plus(int n){
        int count = 0;
        unsigned int flag = 1;
        while(flag != 0 ){
            if(n & flag)
                count++;
            flag = flag << 1;
        }
        return count;
    }
    
    int main()
    {
        cout << "Hello world!" << endl;
        cout<<NumberOf1(-2)<<endl;
        return 0;
    }
    

    Java版

    package zr.offer;
    
    public class Num_15 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.out.println(NumberOf1(-1));
    		System.out.println(NumberOf1(9));
    	}
    	
    	public static int NumberOf1(int n) {
    		int count = 0;
    		long flag = 1;
    		for(int i = 1; i <= 32; i++) {
    			if((n & flag) != 0) 
    				count++;
    			flag = flag << 1;
    		}
    		return count;
    	}
    
    }
    

      这个题目还有一种很新奇的解法。有如下思路:把一个整数减1之后再和原来的整数做位于运算,得到的结果相当于把整数的二进制表示中最右边的1变成0。很多二进制的问题都可以用这种思路解决。

  • 相关阅读:
    Spring国际化模块
    广告牌 循环 轮播 图片
    ImageLoader 网络加载图片
    ProgressBar 进度条 旋转
    UI处理 线程
    权限 动态 访问
    系统 状态栏 导航栏
    对话框 dialog 整理
    修改 字体
    获取 Activity中所有的View ViewGroup
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13336887.html
Copyright © 2020-2023  润新知