4

ビット単位の操作を行う単純な関数を定義しています。

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

3 に答える 3

5

演算子 & は、&& および | と同じ優先順位を持ちます。は || と同じ優先順位を持つため、式は意図した順序とは異なる順序で評価されました。Scala 仕様のセクション 6.12.3 を参照してください。

& と | の優先順位 直感的には低く、頻繁にエラーの原因となります。良い作業習慣は、それらを常に括弧で囲むことです。

于 2013-11-12T16:41:47.613 に答える