如何解决;“错误的操作数类型”;对于Java中的以下函数?
基本上,我想在Java中尝试按位操作,而C和Java似乎不以相同的方式处理位如何解决;“错误的操作数类型”;对于Java中的以下函数?,java,bit-manipulation,Java,Bit Manipulation,基本上,我想在Java中尝试按位操作,而C和Java似乎不以相同的方式处理位 public static boolean checkIsPowerOfTwo(int x) { return ( !(x & (x-1)) ); } 这个函数在Java中无法正常工作,因此我对位运算符的理解显然不适合Java 我得到的错误是 CheckIsPowerOfGivenNumber.java:13: error: bad operand type int for unary operato
public static boolean checkIsPowerOfTwo(int x) {
return ( !(x & (x-1)) );
}
这个函数在Java中无法正常工作,因此我对位运算符的理解显然不适合Java
我得到的错误是
CheckIsPowerOfGivenNumber.java:13: error: bad operand type int for unary operator '!'
return ( !(x & (x-1)) );
^
如何更正此问题?与C相比,Java类型系统更为严格。特别是它不执行从
int
到boolean
的自动转换(这实际上有助于防止许多愚蠢的错误)。运算符仅适用于布尔类型。使用==
运算符将值与0
进行显式比较:
public static boolean checkIsPowerOfTwo(int x) {
return (x & (x-1)) == 0;
}
实际上,(x&(x-1))==0
也是一个有效的C代码,但看起来显然不那么神秘。我也建议用这种方式在C上写。实际上按位部分是正确的,问题是!是一个逻辑not——按位not(comm运算符是~)。尽管如此,您仍然有将int转换为布尔值的问题
return ((~(x &(x-1)) == 0);
这是c代码,不是Java。你在Java中发现了关于运算符的什么。你为什么希望它工作?!
是一个布尔运算符。你试图将它应用于整数。这不起作用,它会编译,但将!something
更改为~ something==0
显然是错误的