搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 求一个笔试题答案
标题:
求一个笔试题答案
只看楼主
凤凤
等 级:
新手上路
帖 子:2
专家分:0
注 册:2010-3-24
结帖率:
0
楼主
已结贴
√
问题点数:20 回复次数:11
求一个笔试题答案
如何求一个数字是不是2的幂 不能用循环
搜索更多相关主题的帖子:
笔试
2010-03-25 11:55
ldg628
等 级:
火箭侠
威 望:
3
帖 子:526
专家分:3036
注 册:2009-6-23
第
2
楼
得分:2
printf("%d : %s\n", i, ((i & (i - 1)) ?"false":"true"); false : 为不是; true : 为是
2010-03-25 13:09
okgays
等 级:
论坛游民
帖 子:15
专家分:26
注 册:2010-3-23
第
3
楼
得分:2
楼上的方法不错!
2010-03-25 13:24
mywaylgh
来 自:厨房
等 级:
蝙蝠侠
威 望:
5
帖 子:188
专家分:729
注 册:2010-3-10
第
4
楼
得分: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
等 级:
论坛游侠
帖 子:67
专家分:161
注 册:2010-3-17
第
5
楼
得分:2
printf("%d : %s\n", i, ((i & (i - 1)) ?"false":"true"); false : 为不是; true : 为是
看不明白,能说说吗??
(i & (i - 1)) 能说明一下吗?
2010-03-25 14:30
ldg628
等 级:
火箭侠
威 望:
3
帖 子:526
专家分:3036
注 册:2009-6-23
第
6
楼
得分: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
来 自:厨房
等 级:
蝙蝠侠
威 望:
5
帖 子:188
专家分:729
注 册:2010-3-10
第
7
楼
得分:0
ldg628 兄 估计太忙
那我就来替他说明下:
&是位运算符(位运算与)
某个数是2的幂那么这个数用二进制表示一定是:
最高位为1
其它位全部为0
那么这个数减1,用二进制表示是:
除对应最高位为0外,
其余全为1
所以 i & (i-1) ==0 是 i是否为2的幂的充要条件
如果不知道位运算是什么,请google....
人生就像茶几 上面放着许多杯具
人生也像厨房 里面总有一些洗具
2010-03-25 14:44
mywaylgh
来 自:厨房
等 级:
蝙蝠侠
威 望:
5
帖 子:188
专家分:729
注 册:2010-3-10
第
8
楼
得分:0
晕,这么快就回复了
人生就像茶几 上面放着许多杯具
人生也像厨房 里面总有一些洗具
2010-03-25 14:44
mikelr
等 级:
论坛游侠
帖 子:67
专家分:161
注 册:2010-3-17
第
9
楼
得分:0
恩。谢谢ldg628高手
2010-03-25 14:47
longlong89
来 自:广州
等 级:
小飞侠
威 望:
6
帖 子:1043
专家分:2754
注 册:2009-8-18
第
10
楼
得分:2
只好接分了.
想象力征服世界
2010-03-28 21:22
12
1/2页
1
2
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-300491-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.306261 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved