运算符 ^ 对于参数类型 int,boolean 是未定义的
the operator ^ is undefined for argument type(s) int,boolean
我正在解决 Hackerrank 问题 'Maximizing xor'。
(https://www.hackerrank.com/challenges/maximizing-xor)
我已经使用 'if' 语句来检查 i xor j 是否大于 'max',如代码所示。
static int maxXor(int l, int r) {
int max=0;
for(int i=l;i<r;i++)
for(int j=l;j<r;j++)
{
if(i^j>max)/*error part*/
max=i^j;
}
return max;
}
但为什么会出现此错误?
the operator ^ is undefined for argument type(s) int,boolean'
您需要在表达式两边加上括号:
if ( (i ^ j) > max )
根据 Java's operator precedence table,异或运算符 ^
的优先级低于不等运算符 >
.
因此,您的 i ^ j > max
的原始书面表达将被解释为 i ^ (j > max)
。但是这里的类型不正确:i
是 int
,而 (j > max)
是 boolean
。这就是您遇到编译器错误的原因。
附带说明一下,如果您在 C/C++ 中编译此代码,它本来可以编译,但会 运行 产生奇怪的结果。这是因为在 C/C++ 中,相同的运算符优先级规则适用于这种情况,但 bool
将转换为 0 或 1 的 int
,然后异或将继续.这将是危险和错误的。 Java 编译器阻止您对 int
与 boolean
进行异或,这将是一个无意义的操作。
看看 Java 运算符优先级:http://bmanolov.free.fr/javaoperators.php。如您所见,整数比较 (<, >) 比 xor 具有更高的优先级。所以你的陈述在 java 中被解释为
if ( i ^ (j>max))
因此您必须手动在语句中添加括号
if ( (i^j) > max)
为了达到你想要的比较。
我正在解决 Hackerrank 问题 'Maximizing xor'。 (https://www.hackerrank.com/challenges/maximizing-xor)
我已经使用 'if' 语句来检查 i xor j 是否大于 'max',如代码所示。
static int maxXor(int l, int r) {
int max=0;
for(int i=l;i<r;i++)
for(int j=l;j<r;j++)
{
if(i^j>max)/*error part*/
max=i^j;
}
return max;
}
但为什么会出现此错误?
the operator ^ is undefined for argument type(s) int,boolean'
您需要在表达式两边加上括号:
if ( (i ^ j) > max )
根据 Java's operator precedence table,异或运算符 ^
的优先级低于不等运算符 >
.
因此,您的 i ^ j > max
的原始书面表达将被解释为 i ^ (j > max)
。但是这里的类型不正确:i
是 int
,而 (j > max)
是 boolean
。这就是您遇到编译器错误的原因。
附带说明一下,如果您在 C/C++ 中编译此代码,它本来可以编译,但会 运行 产生奇怪的结果。这是因为在 C/C++ 中,相同的运算符优先级规则适用于这种情况,但 bool
将转换为 0 或 1 的 int
,然后异或将继续.这将是危险和错误的。 Java 编译器阻止您对 int
与 boolean
进行异或,这将是一个无意义的操作。
看看 Java 运算符优先级:http://bmanolov.free.fr/javaoperators.php。如您所见,整数比较 (<, >) 比 xor 具有更高的优先级。所以你的陈述在 java 中被解释为
if ( i ^ (j>max))
因此您必须手动在语句中添加括号
if ( (i^j) > max)
为了达到你想要的比较。