| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1034 人关注过本帖, 1 人收藏
标题:求一个笔试题答案
只看楼主 加入收藏
凤凤
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-3-24
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:11 
求一个笔试题答案
如何求一个数字是不是2的幂  不能用循环
搜索更多相关主题的帖子: 笔试 
2010-03-25 11:55
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:2 
printf("%d : %s\n", i, ((i & (i - 1)) ?"false":"true"); false : 为不是; true : 为是
2010-03-25 13:09
okgays
Rank: 2
等 级:论坛游民
帖 子:15
专家分:26
注 册:2010-3-23
收藏
得分:2 
楼上的方法不错!
2010-03-25 13:24
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:2 
以下是引用ldg628在2010-3-25 13:09:47的发言:

printf("%d : %s\n", i, ((i & (i - 1)) ?"false":"true")); false : 为不是; true : 为是

这是我这几天在此论坛见过的最牛最高效的代码了

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-03-25 14:23
mikelr
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:161
注 册:2010-3-17
收藏
得分:2 
printf("%d : %s\n", i, ((i & (i - 1)) ?"false":"true"); false : 为不是; true : 为是


看不明白,能说说吗??

(i & (i - 1)) 能说明一下吗?
2010-03-25 14:30
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
如果i是2的幂的话,它的二进制形式必然是 10...0(...代表n个0) 则i-1的二进制形式必然为 01...1,则 i & (i-1)肯定等于 0;
如果i不是2的幂,它的二进制形式肯定不是 10...0, 至少有这个数的二进制形式里面有两个1(除了0),i-1时最低位的1借位给前面的了,肯定不会影响到高位的1, i与(i-1)的高位相与时,必然是等于1的,所以i&(i-1)肯定不为0,为真
2010-03-25 14:42
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:0 
ldg628 兄 估计太忙
那我就来替他说明下:
&是位运算符(位运算与)
某个数是2的幂那么这个数用二进制表示一定是:
  最高位为1
  其它位全部为0
那么这个数减1,用二进制表示是:
 除对应最高位为0外,
 其余全为1

所以 i & (i-1) ==0 是 i是否为2的幂的充要条件
如果不知道位运算是什么,请google....



人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-03-25 14:44
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:0 
晕,这么快就回复了

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-03-25 14:44
mikelr
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:161
注 册:2010-3-17
收藏
得分:0 
恩。谢谢ldg628高手
2010-03-25 14:47
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:2 
只好接分了.

想象力征服世界
2010-03-28 21:22
快速回复:求一个笔试题答案
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027890 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved