加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

求函数返回值,输入x=9999

(2009-06-02 09:33:06)
标签:

函数

个数

循环次数

二进制数

杂谈

分类: 技术

这个题目已经遇到好几次了,第一次没思路,第二次有些思路,但是好像不对(虽然答案对了),昨天又遇到了一次,今天上网找了一下答案,总之就是把9999变为二进制去做,然后就可以发现规律了。

求函数返回值,输入x=9999;

  int func ( x )

  {

  int countx = 0;

  while ( x )

  {

  countx ++;

  x = x&(x-1);

  }

  return countx;

  }

  结果呢?

  知道了这是统计9999的二进制数值中有多少个1的函数,且有

  9999=9×1024+512+256+15

  9×1024中含有1的个数为2;

  512中含有1的个数为1;

  256中含有1的个数为1;

  15中含有1的个数为4;

  故共有1的个数为8,结果为8。

  1000 - 1 = 0111,正好是原数取反。这就是原理。

  用这种方法来求1的个数是很效率很高的。

  不必去一个一个地移位,循环次数最少。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有