黑马程序员技术交流社区

标题: 不用算术运算符,如何判定一个数是否是二的幂? [打印本页]

作者: 路文龙    时间: 2015-3-7 15:49
标题: 不用算术运算符,如何判定一个数是否是二的幂?
本帖最后由 路文龙 于 2015-3-8 17:12 编辑

我实现了用取模和除运算符检查一个数是不是二的幂,但是不用运算符怎么实现?用位运算么?
取模和除运算实现:
  1. public class two {

  2.         public static boolean  judge(int n){
  3.                         if(n%2!=0)
  4.                                 return false;
  5.                         while(true)
  6.                         {        
  7.                                  if(n%2!=0){
  8.                                          return false;
  9.                                  }
  10.                                  if(n==2||n==0)
  11.                                          break;               
  12.                                  n=n/2;
  13.                                 }
  14.                         return true;
  15.         }
  16.         public static void main(String str[]){
  17.                 System.out.println(two.judge(1025));
  18.         }
  19. }
复制代码


作者: z47057554    时间: 2015-3-8 05:49
本帖最后由 z47057554 于 2015-3-8 05:52 编辑

先说10 进制
1=10*(0)自定义的幂表示
10=10*(1)
。。。
1000...0=10*(n) n表示1后面的0个数
对比说二进制
1=2*(0)
10=2*(1)
.。。。
1000...0=2*(n);n为1后面0的个数
那么判断是否2的幂的依据,就是,把每个位上的数都取出来,这里你应该会取吧
取完所有的位存放于数组,因为二进制只能取到0,1,所以只要判断数组中是不是有且仅有一个1即可,当然也可以判断具体是哪个多少幂



作者: 路文龙    时间: 2015-3-8 09:07
z47057554 发表于 2015-3-8 05:49
先说10 进制
1=10*(0)自定义的幂表示
10=10*(1)

恩,谢谢。
作者: 路文龙    时间: 2015-3-8 09:11
  1. public static boolean powerOfTwo(int x) {
  2. return (x & (x - 1)) == 0;
  3. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2