A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 路文龙 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 加油

查看全部评分

3 个回复

倒序浏览
本帖最后由 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即可,当然也可以判断具体是哪个多少幂


评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
z47057554 发表于 2015-3-8 05:49
先说10 进制
1=10*(0)自定义的幂表示
10=10*(1)

恩,谢谢。
回复 使用道具 举报
  1. public static boolean powerOfTwo(int x) {
  2. return (x & (x - 1)) == 0;
  3. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马