栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

查找没有数学函数或对数函数的数字是否为2的幂

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查找没有数学函数或对数函数的数字是否为2的幂

您可以使用以下方法测试正整数

n
是否为2的幂

(n & (n - 1)) == 0

如果

n
可以是非正数(即负数或零),则应使用

(n > 0) && ((n & (n - 1)) == 0)

如果

n
确实是2的幂,那么在二进制中它将看起来像:

10000000...

所以

n - 1
看起来像

01111111...

当我们按位进行“与”运算时:

  10000000...& 01111111...  -----------  00000000...

现在,如果

n
不是 2的幂,那么它的二进制表示形式除了前导1外还有其他1,这意味着两个
n
n -1
都具有相同的前导1位(因为减去1可能无法关闭该位二进制表示中的另一个地方有1)。因此,如果不是2的幂,该
&
操作将不会产生,因为将和的两个前导位都将自身产生。当然,这是肯定的。
0``n``&``n``n- 1``1``n

Wikipedia上的“用于检查正数是否为2的幂的快速算法”中也对此进行了说明。


快速健全性检查:

for (int i = 1; i <= 100; i++) {    if ((i & (i - 1)) == 0)        System.out.println(i);}1个248163264


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号