C函数源代码阅读

作者在 2011-03-07 13:04:59 发布以下内容
          下面的程序是计算出一个十进制数的二进制位中有多少个1:
 
 
#include <stdio.h>
#include <stdlib.h>
int func (int x)
{
 int countx = 0;
 while ( x )
 {
  countx ++;
   x = x&(x-1);          //注意这里
 }
 return countx;
}

int main(int argc, char *argv[])
{
 int a;
 scanf("%d",&a);
 printf("%d\n",func(a));
 system("pause");
 return 0;
}
默认分类 | 阅读 1976 次
文章评论,共16条
zzgzzg00
2011-03-07 21:09
1
o 明白了
hexu2010
2011-03-08 22:26
2
为什么啊...不明白
尤慕思(作者)
2011-03-09 12:49
3
<div class="quote"><span class="q"><b>hexu2010</b>: 为什么啊...不明白</span></div>把x和(x-1)进行按位与运算可以把从低位开始的1给消去,<br />
例如:<br />
输入7,则7&amp;6即是0111&amp;0110,结果为0110即6,<br />
再拿6&amp;5,即0110&amp;0101结果为0100,<br />
再有0100&amp;0011,结果为零,结束循环此时countx=3,而7的二进制0111,刚好有3个1.你可以自己写例子验证<img src="image/face/1.gif" class="face">
hexu2010
2011-03-09 13:40
4
<div class="quote"><span class="q"><b>尤慕思</b>: 把x和(x-1)进行按位与运算可以把从低位开始的1给消去,<br />
例如:<br />
输入7,则7&amp;6即是0111&amp;0110,结果为0110即6,<br />
再拿6&amp;5,即0110&amp;0101结果为0100,</span></div>x与x-1进行按位与运算为什么可以去掉从低<br />
位开始的1?
hexu2010
2011-03-09 13:43
5
意思明白了,但是不太好说啊
hexu2010
2011-03-09 13:45
6
不过还是谢谢你!哈哈,高手啊,写出这个不容易么,没研究过按位与运算一系列的规律……
尤慕思(作者)
2011-03-09 22:44
7
<div class="quote"><span class="q"><b>hexu2010</b>: 不过还是谢谢你!哈哈,高手啊,写出这个不容易么,没研究过按位与运算一系列的规律……</span></div>你抬举我了,这是我从书上找到的,O(∩_∩)O哈哈~,<br />
多读些代码对知识的深入理解很有好处,所以写在这里让路人看看<img src="image/face/18.gif" class="face">
hexu2010
2011-03-10 21:52
8
<div class="quote"><span class="q"><b>尤慕思</b>: 你抬举我了,这是我从书上找到的,O(∩_∩)O哈哈~,<br />
多读些代码对知识的深入理解很有好处,所以写在这里让路人看看<img src="image/face/18.gif" class="face"></span></div>呵呵,恩
canxden
2011-03-18 18:27
9
还刚刚开始学的路过
明晟
2011-03-18 19:41
10
不错,算法很巧妙。
变幻小子
2011-03-21 13:18
11
你好&nbsp;&nbsp;路过看看
fj97897217
2011-03-29 20:19
12
<img src="image/face/3.gif" class="face">路过 ,看看!顶下!!~~
westerngoat
2011-04-04 14:22
13
good.
尤慕思(作者)
2011-04-11 22:52
14
<div class="quote"><span class="q"><b>westerngoat</b>: good.</span></div>三Q油<img src="image/face/2.gif" class="face">
尤慕思(作者)
2011-04-11 22:56
15
<div class="quote"><span class="q"><b>canxden</b>: 还刚刚开始学的路过</span></div>刚开始一定要用心<img src="image/face/1.gif" class="face">
啊1624739559
2011-04-14 23:36
16
不明白
游客请输入验证码
浏览70872次
最新评论