我是新来的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,以获得布尔结果。
任何帮助将不胜感激
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)) )