二元运算符 & 的错误操作数类型
bad operand types for binary operator &
我正在尝试使用按位 & 运算符打印偶数然后打印奇数,但不知道为什么它不能使用三元运算符。
class Geeks {
static void evenOdd (int a,int b)
{
int e = (a&1==0)?a:b;// error: bad operand types for binary operator '&'
System.out.println(e);
int o = (a&1==1)?a:b;// error: bad operand types for binary operator '&'
System.out.print(o);
}
}
这是因为使用了运算符的优先级。
由于 == 的优先级高于 &,因此计算 1==0。它评估为布尔结果。因为 & 得到 2 个操作数 - 一个布尔值和一个整数。它会导致编译错误,因为 & 可以在相似的类型上执行。
这与先乘后加(即BODMAS)的道理相同
在这种情况下必须使用括号:
System.out.println(e);
int o = ((a&1)==1)?a:b;
System.out.print(o);
我正在尝试使用按位 & 运算符打印偶数然后打印奇数,但不知道为什么它不能使用三元运算符。
class Geeks {
static void evenOdd (int a,int b)
{
int e = (a&1==0)?a:b;// error: bad operand types for binary operator '&'
System.out.println(e);
int o = (a&1==1)?a:b;// error: bad operand types for binary operator '&'
System.out.print(o);
}
}
这是因为使用了运算符的优先级。
由于 == 的优先级高于 &,因此计算 1==0。它评估为布尔结果。因为 & 得到 2 个操作数 - 一个布尔值和一个整数。它会导致编译错误,因为 & 可以在相似的类型上执行。
这与先乘后加(即BODMAS)的道理相同
在这种情况下必须使用括号:
System.out.println(e);
int o = ((a&1)==1)?a:b;
System.out.print(o);