免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3790 | 回复: 19
打印 上一主题 下一主题

请高手看看这句话意思?谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-01 20:58 |只看该作者 |倒序浏览
函数功能:返回X二进制1的个数

int func ( x )
{
    int countx = 0;
    while ( x )
    {
        countx ++;
        x = x&(x-1);  //为什么这句话可以算出来?
    }
    return countx;
}

论坛徽章:
0
2 [报告]
发表于 2008-04-01 21:23 |只看该作者
WHO  SAY 这个&  符号的意思?

论坛徽章:
0
3 [报告]
发表于 2008-04-01 21:30 |只看该作者
x = x&(x-1) 每次清最后一个1

论坛徽章:
0
4 [报告]
发表于 2008-04-01 21:41 |只看该作者
sorry,i don't know

这个符号是什么意思?

论坛徽章:
0
5 [报告]
发表于 2008-04-01 21:44 |只看该作者
& 按位与

论坛徽章:
0
6 [报告]
发表于 2008-04-01 21:51 |只看该作者

论坛徽章:
0
7 [报告]
发表于 2008-04-02 08:47 |只看该作者

回复 #3 gaocheng 的帖子

>>>x = x&(x-1) 每次清最后一个1
X=0X10
X-1=0XF

0001,0000&
0000,1111
结果:
0000,0000

[ 本帖最后由 rocky1972 于 2008-4-2 09:42 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-04-02 08:51 |只看该作者
实际上资料上说x&((x-1)是计算x的二进制中 1  的个数的最快的算法,小弟就是不明其中的道理。哪位朋友帮着说一下。

谢谢

论坛徽章:
0
9 [报告]
发表于 2008-04-02 09:33 |只看该作者
原帖由 rocky1972 于 2008-4-2 08:47 发表
>>>x = x&(x-1) 每次清最后一个1
X=0X10
X-1=0XF

0001,0000&
0000,1111
结果:
0001,1111

很容易看到没有清最后一个1

无语了⋯⋯
还有,你的入参没类型?

论坛徽章:
0
10 [报告]
发表于 2008-04-02 09:43 |只看该作者

回复 #9 sinoman 的帖子

刚犯迷糊了
不好意思阿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP