我是靠谱客的博主 朴实羽毛,最近开发中收集的这篇文章主要介绍vb怎么判断整数_判断一个数是否为2的整数次幂,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

判断一个正整数是否是2的整数幂(如4是2的2次方,返回true;5不是2的整数次幂,则返回false)。要求性能尽可能高。

第一种考虑(乘法)

创建一个中间变量temp,初始值是1,然后进入一个循环,每次循环都让temp和目标值进行比较,如果相等,则说明目标是2的整数次幂,

如果不相等,则让temp乘以2,继续循环比较,直到temp的值大于目标整数时,说明整数不是2的整数次幂。

比如:18

1*2=2;2比18小继续

2*2=4;4比18小继续

4*2=8;8比18小继续

8*2=16;16比18小继续

16*2=32;32比18大退出循环,说明18不是2的整数幂。

如果目标整数的大小是n,则此方法循环次数是logn。

代码如下:

 1 public static boolean is2Power1(int num) { 2 int temp = 1; 3 while (temp <= num) { 4 if (temp == num) { 5 return true; 6 } 7 temp = temp << 1; 8 // temp = temp * 2; 9 }10 return false;11 }

想一想,有没有更好的办法?

第二种考虑(除法)

2的整数次幂都能被2整除,所以进入一个循环,让目标对2求余,如果有余数,则目标不是2的整数次幂,

如果没有余数,然后目标赋值为目标除以2,直到目标小于1,当目标小于1的时候则说明明目标是2的整数次幂。

比如:18

18%2=0;18被2整除

18/2=9;目标赋值为9

9%2=1;9没被2整除退出循环,说明18不是2的整数幂。

如果目标整数的大小是n,则此方法循环次数有可能是1,2,3,4,...logn次。

代码如下:

 1 public static boolean is2Power2(int num) { 2 while (num > 1) { 3 if (num % 2 == 1) { 4 return false; 5 } 6 // num = num / 2; 7 num = num >> 1; 8 } 9 return true;10 }

再想一想,有没有更好的办法?

第三种考虑(位运算)

让我们看看2的整数次幂转成二进制是什么样的

54408d07f76b1a418898b33985925fef.png

是不是发现了,如果一个整数是2的整数次幂,那么当它转化成二进制时,只有最高位是1,其它位都是0!如果把这2的整数次幂各自减去1,在转换成二进制,会是什么样呢?

ae0f4b05c8f3911058da07406769c279.png
f76ef2d3e395124bcd6395a6471f9b15.png

怎么样会写代码了吗?

代码如下:

1 public static boolean is2Power3(int num) {2 return (num & num - 1) == 0;3 }

原文:https://www.cnblogs.com/javaExperience/p/11465356.html

最后

以上就是朴实羽毛为你收集整理的vb怎么判断整数_判断一个数是否为2的整数次幂的全部内容,希望文章能够帮你解决vb怎么判断整数_判断一个数是否为2的整数次幂所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部