这是我试过的。它说第二个操作数是布尔值,而第一个操作数是长的。所以&运算符未定义为long和boolean。
public static void powerOfTwo(long a){
if(a & (a-1) == 0 )
System.out.println("it's a power of two");
else
System.out.println("NOT a power of two");
}
答案 0 :(得分:3)
您必须将表达式包装在额外的括号中:
public static void powerOfTwo(long a) {
if ((a & (a - 1)) == 0)
System.out.println("it's a power of two");
else
System.out.println("NOT a power of two");
}
那是因为运营商==
优先于&
(请参阅here),所以没有大括号,你有
a & (a - 1) == 0
与
相同a & ((a - 1) == 0)
然后编译器抱怨比较long(a
)和布尔(a-1 == 0)
答案 1 :(得分:0)
您可以使用
return a != 0 && ((a & (a-1)) == 0);
然而,这是模糊不清的。更简单的方法是
return Long.bitCount(a) == 1
这也不完全明显,但只有一位设置意味着它必须是2的幂。