2017-06-05 136 views
-1

我不知道什么是错做,但这个代码是给我这个错误:错误的操作数类型的二进制运算符“& &”我应该如何解决这个错误:错误的操作数类型的二进制运算符“&&”

if((n%2==0) && (n>>6) && (n<<20)) 
{ 

      ans = "Not Weird"; 
     } 
+4

你觉得'n >> 6'和'n << 20'做什么?他们转移位。它们不会解析为一个布尔值来检查true或false值。你可能会想到'>'和'<'。 – AntonH

+0

感谢它的工作! –

回答

1

大于只是>,而不是>>,这是一个移位操作符。相同的小于和<<<

移位运算符返回一个整数类型,&&预计双方都是boolean类型。有关移位运算符的更多信息,请参见此问题:How do shift operators work in Java?

-1

此处>>是带符号的右移运算符。例如

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" 
    } 
+0

不是投票者,但是看着你给出的这个答案和其他答案,你可以给出正确的代码,但很少没有解释。详细阐述OP为什么会出现错误或解释您的更正会大大降低人们对您的答案进行低估的可能性。 – AntonH

+0

@AntonH感谢您的建议 – Binu

+0

不是一个downvoter(来自低质量的帖子审查队列在这里):一个好的答案不只是代码,请详细说明这是什么,与原始有什么不同,什么是错误的和* *为什么**这是错的 – Zoe

0

>><<是位运算符。它们评估为整型,Java不会将整型隐式转换为boolean类型,这是&&参数和if条件所必需的。

所以,你应该重写

if (n > 6 && n < 20 && n % 2 == 0) 

我已经采取去除多余的括号和自由重新排序,从而计算上更便宜><首先评估报表,以及更昂贵的%只有在必要时。这是一个微型优化,但向读者展示了你的代码,你知道你在做什么。

相关问题