Java下面的函数如何求解"Bad operand type"?
How to solve "Bad operand type" for the function below in Java?
基本上我想在 Java 中尝试按位操作,但似乎 C 和 Java 不以相同的方式处理位。
public static boolean checkIsPowerOfTwo(int x) {
return ( !(x & (x-1)) );
}
这个函数 taken from here 在 Java 中没有按预期工作,所以我对按位运算符的理解显然不适合 Java。
我得到的错误是
CheckIsPowerOfGivenNumber.java:13: error: bad operand type int for unary operator '!'
return ( !(x & (x-1)) );
^
我该如何纠正?
Java 类型系统比 C 更严格。特别是它不会执行从 int
到 boolean
的自动转换(这实际上有助于防止许多愚蠢的错误)。 Java 中的 !
运算符仅适用于布尔类型。使用 ==
运算符显式比较值与 0
:
public static boolean checkIsPowerOfTwo(int x) {
return (x & (x-1)) == 0;
}
实际上 (x & (x-1)) == 0
也是一个有效的 C 代码,但看起来绝对不那么神秘。我也建议用这种方式在 C 上编写。
实际上按位部分是正确的问题是!是一个逻辑非 --- 按位非(comm 运算符是 ~。话虽如此,你仍然有将 int 转换为布尔值的问题。
return ((~(x &(x-1)) == 0);
基本上我想在 Java 中尝试按位操作,但似乎 C 和 Java 不以相同的方式处理位。
public static boolean checkIsPowerOfTwo(int x) {
return ( !(x & (x-1)) );
}
这个函数 taken from here 在 Java 中没有按预期工作,所以我对按位运算符的理解显然不适合 Java。
我得到的错误是
CheckIsPowerOfGivenNumber.java:13: error: bad operand type int for unary operator '!'
return ( !(x & (x-1)) );
^
我该如何纠正?
Java 类型系统比 C 更严格。特别是它不会执行从 int
到 boolean
的自动转换(这实际上有助于防止许多愚蠢的错误)。 Java 中的 !
运算符仅适用于布尔类型。使用 ==
运算符显式比较值与 0
:
public static boolean checkIsPowerOfTwo(int x) {
return (x & (x-1)) == 0;
}
实际上 (x & (x-1)) == 0
也是一个有效的 C 代码,但看起来绝对不那么神秘。我也建议用这种方式在 C 上编写。
实际上按位部分是正确的问题是!是一个逻辑非 --- 按位非(comm 运算符是 ~。话虽如此,你仍然有将 int 转换为布尔值的问题。
return ((~(x &(x-1)) == 0);