使用包含按位运算符的If语句键入不匹配

时间:2013-04-03 05:42:21

标签: scala types bitwise-operators type-mismatch

我是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     
  }
}

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

代码(c & (1<<j))应该将1个左j位移位,然后将结果按位并将其转换为变量c中的int以获得布尔结果。

我完全有可能做错了。我已经学习了Scala 3天了,而且我的java非常生疏。

任何帮助都会被哄骗

2 个答案:

答案 0 :(得分:2)

Scala中的按位运算(实际上是在任何语言中)返回类型Int的结果,if表达式需要Boolean类型。 Scala不会将Boolean值视为C,您的代码可以正常工作。

您可以通过明确测试Boolean

,使表达式返回1
if((c & (1 << j)) != 0)

答案 1 :(得分:1)

与C(或C ++)不同,Scala的if语句(就像Java一样)只接受Boolean表达式,并且没有从整数类型到{{的隐式类型提升1}}。因此,您需要明确说明您想要的内容,并将Boolean替换为if( (c & (1<<j)) )