与包含位操作符的If语句类型不匹配



我是新来的scala,但我有以下代码的问题:

var c:Int = 0
var j:Int = 0
for( c <- 0 to 100){
  for( j <- 0 to 100){
   /* Check if jth bit in c is set,
    if( (c & (1<<j)) )  // this line is the line where i get the error
    xs :+ (ys(j))   // this is copying element j from list ys to list xs     
  }
}

得到的错误是:类型不匹配;Int required: Boolean

代码(c & (1<<j))应该向左移动1 j位,然后将结果按位移到变量c中的int,以获得布尔结果。

我完全有可能做错了什么。我已经学了3天Scala了,我的java已经很生疏了。

任何帮助将不胜感激

Scala(实际上在任何语言中)的按位操作返回类型为Int的结果,您的if表达式需要类型为Boolean。Scala不像C语言那样处理Boolean值,在C语言中,您的代码可以正常工作。

您可以通过显式测试1来使表达式返回Boolean:

if((c & (1 << j)) != 0)

与C(或c++)不同,Scala的if语句(就像Java一样)只接受Boolean表达式,并且没有从整型到Boolean的隐式类型提升。所以你需要明确你想要什么,用if( (c & (1<<j)) != 0)代替if( (c & (1<<j)) )

最新更新