2013-11-12 2 views
1

я определяю простую функцию, чтобы сделать какую-то операцию побитового:Scala операция поразрядного

def getBit(num:Int, i:Int):Boolean = (num & (1 << i) != 0) 

Но я получаю эту ошибку:

<console>:7: error: overloaded method value & with alternatives: 
    (x: Long)Long <and> 
    (x: Int)Int <and> 
    (x: Char)Int <and> 
    (x: Short)Int <and> 
    (x: Byte)Int 
cannot be applied to (Boolean) 
     def getBit(num:Int, i:Int):Boolean = (num & (1 << i) != 0) 

Почему я не могу использовать оператор &? Как я могу решить эту ошибку?

ответ

4

Следующий код должен работать: def getBit(num:Int, i:Int):Boolean = ((num & (1 << i)) != 0)

+0

В вашем примере функция '&' получает результат '(1 << i)! = 0' передан как параметр, который является' Boolean'. Функция '&' требует в этом случае 'Int'. – LuGo

+0

Ok Thx. оно работает !! – Dimitri

2

Оператор & имеет тот же приоритет, как & &, и | имеет тот же приоритет, что и ||, поэтому ваше выражение оценивалось в другом порядке, чем вы предполагали. См. Раздел 6.12.3 от the Scala spec.

Прецедент & и | является неинтуитивно низким и частым источником ошибок. Хорошая рабочая привычка состоит в том, чтобы всегда приводить в круглые скобки вокруг них.

Смежные вопросы