不用任何判断语句,不开方计算一个数是不是2的N次方


        关于不用任何判断语句的第二个小问题,也很有趣的。题目如下:请实现不用任何判断语句,不开方计算一个数是不是2的N次方。

        这个问题比上个问题一开始感觉更麻烦,不过有了上一个问题答案的提示,很快就想到了用位运算来做,然后写出来了几个2的N次方的数看了一下规律,想到了以下的解决方法:



		import java.util.Scanner;

		public class Main {
			public static void main(String args[]) {
				Scanner in = new Scanner(System.in);
				System.out.println("Please Input two Integer:");
				int a = in.nextInt();
				String[] output = new String[2];
				output[0]="是";
				output[1]="不是";
				a = a&(a-1);
				try{
					System.out.println(output[a/a]);
				}catch (ArithmeticException e){
					System.out.println(output[0]);
				}
			}
		}
	


因为一个2的N次方的数,其二进制一定是在第N+1位上有一个1,其他各位都是0,而再减1以后,则刚好按位取了反,与是按位与就可以得到0,而如果不是2的N次方,减1则不能得到其按位取反的数。你想到了吗?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值