---------------------------------------------
-- 时间:2019-03-21
-- 创建人:Ruo_Xiao
-- 邮箱:xclsoftware@163.com
---------------------------------------------

最近面试时看见这么一道题目,如下:

int Func(int x)
{int iCount = 0;while (x){x = x & (x - 1);iCount++;}return iCount;
}

当时真是脑袋一热,让我想起了一首歌:让我欢喜让我忧。欢喜的是这道题目出自《程序员面试宝典》,面试之前看过,忧虑的是当时没弄太明白,只是知道答案……今天好好总结一下。

先说答案吧,返回值为8。该函数的功能是计算x的二进制表达中1的个数。

咱们简单梳理一下过程,假设x = 9999,其二进制是0010  0111  0000  1111,

第1次循环执行时,x = (0010  0111  0000  1111) & (0010  0111  0000  1110),其结果为0010  0111  0000  1110。

第2次循环执行时,x = (0010  0111  0000  1110) & (0010  0111  0000  1101),其结果为0010  0111  0000  1100。

……

第4次循环执行时,x = (0010  0111  0000  1000) & (0010  0111  0000  0111),其结果为0010  0111  0000  0000。

第5次循环执行时,x = (0010  0111  0000  0000) & (0010  0110  1111  1111),其结果为0010  0110  0000  0000。

……

第8次循环执行时,x = (0010  0000  0000  0000) & (0001  1111  1111  1111),其结果为0000  0000  0000  0000。

循环结束!

要点是“&”操作,将“1”和“0”对齐,消除掉,很完美!

(SAW:Game Over!)

计算数值二进制表达式中1的个数相关推荐

  1. C语言与,或,非,同或,异或,左移,右移及优先级,查表法计算一个十进制数中1的个数

    1.与:& 2.或:| 3.非:~ 4.异或:^ 5.同或:~^ 6.左移:(<<) 7.右移:(>>) 注意:位运算符中求反运算"~"优先级最高, ...

  2. 题库练习5(句子逆序、字符串排序、int型二进制表示中1的个数、购物单)

    1. 句子逆序 将一个英文语句以单词为单位逆序排放.例如"I am a boy",逆序排放后为"boy a am I".所有单词之间用一个空格隔开,语句中除了英 ...

  3. JAVA实现输入一个整数,输出该数二进制表示中1的个数(《剑指offer》)

    题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 这个题目有个比较有意思并且被公认的解法,我就先贴答案吧: public class Solution {public int ...

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

    转自http://my.oschina.net/ithaibo/blog/142655 题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目引自http://ac.jobdu ...

  5. 算法--微软面试:整数的二进制表示中1的个数(Java实现)

    Q题目 整数的二进制表示中1的个数 输入一个整数,求该整数的二进制表达中有多少个1. 例如,输入10,由于其二进制表示为1010,有两个1,因此输出2. 这是一道很基本的考查位运算的面试题. Answ ...

  6. BZOJ3209(n的二进制表示中1的个数的乘积)

    题目:花神的数论题 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,求 sum(1)至sum(N) 的乘积. #include <iostream> #inc ...

  7. 整数的二进制表示中 1 的个数

    2019独角兽企业重金招聘Python工程师标准>>> 题目:整数的二进制表示中 1 的个数 要求: 输入一个整数,求该整数的二进制表达中有多少个 1. 例如输入 10,由于其二进制 ...

  8. 《剑指offer》-统计整数二进制表示中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 直观思路就是把二进制表示从右往左统计1的个数.直接想到移位操作来迭代处理.坑点在于负数的移位操作会填充1.有人贴出了逻辑移位 ...

  9. ZT 计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48

    计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48 分类: C/C++ [转]计算一个无符整数中1Bit的个数(1) Count the number of bits th ...

最新文章

  1. 2022-2028年中国亲子游行业市场分析及前瞻研究报告
  2. php 网站速度慢,php – 个人用户网站速度慢,但他们可以切换浏览器?
  3. 数学--数论--莫比乌斯反演
  4. TCP超时设置的客户端重发5次
  5. 【广告技术】隐私集合交集运算结合同态加密,在保障数据安全的同时追踪广告效果
  6. [渝粤教育] 武汉理工大学 金属工艺学B 参考 资料
  7. R语言data manipulation学习笔记之创建变量、重命名、数据融合
  8. 多种交换机端口镜像 Port Mirroring 配置
  9. 22. vCenter上解决”此主机当前没有管理网络冗余“的警告
  10. 中望3d快捷键命令大全_中望CAD常用快捷键集合
  11. php中可以给class添加click,jQuery addClass()方法添加class
  12. 解决Mac互联网连接问题的方法
  13. 关于谢尔宾斯基三角(Sierpinski)的讲解
  14. 十五分钟水edusrc证书(小学生日记)
  15. Spring Boot入门(05):了解Spring Boot的starter入门 | 超级详细,建议收藏
  16. AndroidStudio检测不到模拟器的解决方案(百试不爽)
  17. 拟推荐全省文物系统先进_关于对拟表彰全省文博系统文化遗产工作先进集体和先进工作者公示的公告...
  18. echarts实现西安地铁图
  19. OpenWRT飞行计划
  20. 【服务器】多人共享服务器用户管理

热门文章

  1. 小酌重构系列[19]——分解大括号
  2. javascript里的post和get有什么区别
  3. 第二次启用httpd24调用mysql时出现的错误
  4. 卸载CentOS 5.4自带的OpenJDK,配置新的Java环境
  5. apache代理时java获取IP的问题
  6. python jupyter 选择按钮,使用按钮选择数据
  7. Matlab如何绘制散点图矩阵,不同版本的散点图矩阵
  8. mysql 平均月份_Mysql按月份统计和按时段统计SQL
  9. 我是状态机,有一颗永远骚动的机器引擎
  10. Linux sed替换内容中有空格解决办法