Sha*_*gde -6 java operator-precedence boolean-operations
我正在解决Hackerrank问题'最大化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;
}
Run Code Online (Sandbox Code Playgroud)
但为什么我会收到此错误?
对于参数类型int,boolean',运算符^未定义
你需要在表达式周围加上括号:
if ( (i ^ j) > max )
Run Code Online (Sandbox Code Playgroud)
根据Java的运算符优先级表,XOR运算符的^优先级低于不等运算符>.
因此,您原来的书面表达i ^ j > max将被解释为i ^ (j > max).但在这里,类型是不正确的:i是一个int,但是(j > max)是一个boolean.这就是你得到编译器错误的原因.
作为旁注,如果你用C/C++编译这段代码,那么它就会被编译,但它会以奇怪的结果运行.这是因为在C/C++中,在这种情况下适用相同的运算符优先级规则,但是bool它将被转换为int0或1,然后XOR将继续.这本来是危险和错误的.Java编译器阻止你int使用a 进行异或boolean操作,这将是一个无意义的操作.
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |