zoukankan      html  css  js  c++  java
  • 面试题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。很多二进制的问题都可以用这种思路解决。

  • 相关阅读:
    转:孟岩老大的忠告谈谈如何写技术文章
    base html / div / css / HTML / DIV / CSS
    js Connection
    db oracle config
    UNIX + OS IBM AIX 5L HACMP
    JAVA EE JSP collection
    地址和指针的概念
    全局变量
    地址和指针的概念
    内存数组的存储
  • 原文地址:https://www.cnblogs.com/flyingrun/p/13336887.html
Copyright © 2011-2022 走看看