我不知道什么是错做,但这个代码是给我这个错误:错误的操作数类型的二进制运算符“& &”我应该如何解决这个错误:错误的操作数类型的二进制运算符“&&”
if((n%2==0) && (n>>6) && (n<<20))
{
ans = "Not Weird";
}
我不知道什么是错做,但这个代码是给我这个错误:错误的操作数类型的二进制运算符“& &”我应该如何解决这个错误:错误的操作数类型的二进制运算符“&&”
if((n%2==0) && (n>>6) && (n<<20))
{
ans = "Not Weird";
}
大于只是>
,而不是>>
,这是一个移位操作符。相同的小于和<
与<<
。
移位运算符返回一个整数类型,&&
预计双方都是boolean类型。有关移位运算符的更多信息,请参见此问题:How do shift operators work in Java?
此处>>是带符号的右移运算符。例如
int x = -4;
System.out.println(x>>1);
int y = 4;
System.out.println(y>>1);
会给你
-2
2
这同样适用于左移< <运营商。
你想检查大于或小于。所以为此目的,您需要'>'或'<'运营商。 所以正确的条件检查会像
if((n%2==0) && (n>6) && (n<20)) {
ans = "Not Weird"
}
>>
和<<
是位运算符。它们评估为整型,Java不会将整型隐式转换为boolean
类型,这是&&
参数和if
条件所必需的。
所以,你应该重写
if (n > 6 && n < 20 && n % 2 == 0)
我已经采取去除多余的括号和自由重新排序,从而计算上更便宜>
和<
首先评估报表,以及更昂贵的%
只有在必要时。这是一个微型优化,但向读者展示了你的代码,你知道你在做什么。
你觉得'n >> 6'和'n << 20'做什么?他们转移位。它们不会解析为一个布尔值来检查true或false值。你可能会想到'>'和'<'。 – AntonH
感谢它的工作! –