zoukankan      html  css  js  c++  java
  • 用到位运算的题目

    1. 一个int型数组,每个数字都出现了2次,除了一个数字只出现了1次。找出这个数。

    我没有想到位运算,这题悲剧了。

    其实面试官说:int型,我第一想法是,好,int简单多了,少考虑很多可能,但我没有思考:为什么要告诉我整型呢,完全可以说 一个 数组,可定有只适合int型的方法——这样就能想到位运算了。  其实 非int也可以转成二进制表示,但是小数部分无法精确表示。

    这题用异或(^)运算,从第一个数异或到最后一个数,最终值就是 只出现一次的数了。

    2. 输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,输出2.

    法1:整数与1 与运算(&),若结果为1,则 右边第一位值为1.

    int  number(int n)
    {
      int flag=1;
      int count=0;
      while(flag)
      {
        if (flag&n)
          count++;
        flag=flag<<1;
      }
      return count;
    }//该方法 要循环int类型二进制位数,32位的int循环32次。

    法2:整数 减1后,与原整数,就可以置从右起第一个1为0,所以有一个循环 1的个数次的方法。

    int number(int n)
    {
        int count=0;
        while(n)
        {
             n=n&(n-1);
             count++;
        }
        return count;    
    }    
  • 相关阅读:
    熟悉常用的Linux操作
    Python基础之五星红旗
    类似于铁道部12306的城市选择框的实现
    使用Django操作数据库入门
    进程和线程
    线程、进程、携程理解
    CentOS6.8部署Python3.6.8的Django项目
    爬取妹子图片
    聚类算法之DBSCAN
    机器学习算法优缺点总结
  • 原文地址:https://www.cnblogs.com/xaf-dfg/p/3783753.html
Copyright © 2011-2022 走看看