判断一个数是否为 2 的 某 次方

来源:互联网 发布:收看tvb电视软件 编辑:程序博客网 时间:2024/06/05 18:42

在计算机领域,2 有着特殊的地位。

现在给定一个数 n ,检验 n 是否为 2 的某次方。

最简单的方法当然是将 n 不断的 除以 2,如果 n 是 2 的次方,则最后能得到 商为 1。

稍作改良,可以用 移位来代替除以 2 ,因为移位直接在硬件操作,效率比做除法高。

具体代码如下:

public static boolean isPower(int n){if(n < 1)return false;int i = 1;while(i <= n){if(i == n)return true;elsei<<=1;}return false;}

时间复杂度为log n ,算是比较高效的。

但是还有更高效的算法:

充分利用二进制的位运算,如果一个数的二进制数表示只有一位是 1 ,那么这个数是 2 的某次方。

比如 n = 8 的二进制:  0000 1000;n = 16 的二进制 : 0001 0000  ......

那么 n-1 的二进制数的低位都是 1,即 7 的二进制 为 :0000 0111 ,   15 的二进制为 : 0000 1111.

可知此时 n  与 n-1 没有一位同时为 1。将 n 与 n-1 做与运算 n&(n-1),结果应当为 0 。具体代码:

public static boolean isPower(int n){if(n < 1)return false;int m = n&(n-1);return m == 0;}

此时时间复杂度为 O(1),比前面的方法高效得多





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕期间想离婚怎么办 现在怀孕想离婚怎么办 孩子跟父母顶嘴怎么办 孩子嘴歪了怎么办 孩子跟老师顶嘴怎么办 孩子顶嘴父母怎么办读后感 孩子顶嘴总嬉皮笑脸怎么办 孩子和妈妈顶嘴怎么办 宝宝上火眼睛红怎么办 引产的孩子活着怎么办 八个月引产胎儿怎么办 小孩子有好动症怎么办 婴儿高烧38.5度怎么办 孩子发烧怎么办39度 宝宝发烧到37.7怎么办 几个月宝宝发烧怎么办 孩子八个月发烧怎么办 8个多月宝宝发烧怎么办 婴儿水便分离怎么办 宝贝发烧38.5度怎么办 调皮好动的孩子怎么办 小娃娃反复发烧怎么办 孩子在幼儿园好动怎么办 幼儿园好动的孩子怎么办 孕6月拉稀怎么办 孕3月拉稀怎么办 孕八个月拉肚子怎么办 怀孕七个月拉肚子怎么办 宝宝专注力差怎么办 8个宝宝拉肚子怎么办 孩子偏食不吃菜怎么办 孩子好动不认真学习怎么办 写作业写着写着就会发呆怎么办 孩子挑食偏瘦怎么办 小孩子好动和调皮怎么办? 打雷了怎么办教案反思 八个月小孩认生怎么办 八个月宝宝好动怎么办 小孩上课不听讲怎么办 小孩上课不注意听讲怎么办 小孩上课不爱听讲怎么办