Redian新闻
>
面试被问了议题: check if an integer is power of 2 (转载)
avatar
面试被问了议题: check if an integer is power of 2 (转载)# JobHunting - 待字闺中
c*e
1
【 以下文字转载自 Programming 讨论区 】
发信人: coollpe (coollpe), 信区: Programming
标 题: 面试被问了议题: check if an integer is power of 2
发信站: BBS 未名空间站 (Wed Feb 15 10:16:41 2012, 美东)
我首先回答了每次左移移1位比较,然后面试官不满意,我又想出来bitmap,开个64k数
组,他说能不能只有1条语句的判断,我死活想不出来。
后来回家google发现了 x & (x-1)这个trick。不过我觉得如果没看到过的话要在面试
时间内想出来简直不可能。
测试了一下,bitmap的速度要比 x && (x & (x-1))快一些。但机器不同结果也不同。
回家我又想了若干方法
1, popcnt (x) == 1, 新处理器已经可以在1个指令周期内完成。
2, ffs(x)查表,这个表大概只要存32个整数,占用存储小很多,速度和x & (x-1)差不多
3, asm bsrl, asfl, 2个指令周期+1次比较,和x && (x & (x-1)一样快
avatar
m*l
2
150上有

【在 c*****e 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: coollpe (coollpe), 信区: Programming
: 标 题: 面试被问了议题: check if an integer is power of 2
: 发信站: BBS 未名空间站 (Wed Feb 15 10:16:41 2012, 美东)
: 我首先回答了每次左移移1位比较,然后面试官不满意,我又想出来bitmap,开个64k数
: 组,他说能不能只有1条语句的判断,我死活想不出来。
: 后来回家google发现了 x & (x-1)这个trick。不过我觉得如果没看到过的话要在面试
: 时间内想出来简直不可能。
: 测试了一下,bitmap的速度要比 x && (x & (x-1))快一些。但机器不同结果也不同。
: 回家我又想了若干方法

avatar
c*e
3
比较最高位1的位置是否等于最低位1的位置
bool isPowerOfTwo(int x_)
{
register int bitpos, bitpos2;
asm ("bsrl %1,%0": "+r" (bitpos):"rm" (x_));
asm ("bsfl %1,%0": "+r" (bitpos2):"rm" (x_));
return bitpos == bitpos2;
}
avatar
c*e
4
我觉得面试官也就靠记才知道,否则谁想得出?
况且现在popcnt(x)可以做到比他的trick更快。

【在 m*******l 的大作中提到】
: 150上有
avatar
a*n
5
这个没做过的确想不出来。

【在 c*****e 的大作中提到】
: 我觉得面试官也就靠记才知道,否则谁想得出?
: 况且现在popcnt(x)可以做到比他的trick更快。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。