2017-01-09 4 views
2

toBitMaskの指定はBitSetとなり、Creates a bit mask for this set as a new array of longsと表示されます。しかし、私はtoBitMaskが本当にビットマスクを作成する方法を理解できません。たとえば、私は次のコードを持っています:Scala Bitset toBitMask変換

import scala.collection.BitSet 
val nums = BitSet(6) 
nums.toBitMask foreach println 

1.それは正確に64を返しますか?

アン別の例

val nums1 = BitSet(3, 2).toBitMask 
    val nums2 = BitSet(3, 2, 0).toBitMask 
  • なぜnums1 = 12ながらnums2 = 13?
  • 答えて

    3

    .toBitMaskはBitSetの各番号を「このビット数は1に設定されます」と扱っているようです。

    BitSet(0).toBitMask == Array(1) 
    BitSet(1).toBitMask == Array(2) 
    BitSet(2).toBitMask == Array(4) 
    BitSet(3).toBitMask == Array(8) 
    

    あなたはBitSet(3, 2)を持っているのであれば、あなたはビット3及び2(ゼロインデックス)が1である数作成する:

    00001100 
    

    これは12 BitSet(3,2,0)バイナリでは

    00001101 
    
    を作成します

    13のバイナリです。

    +0

    BitSet(3,2) - > 00001100は '2'のように見えますか? – pacman

    +0

    これは無視されません。最後の "1100"はビット数3,2,1,0 – Dylan

    +0

    'toBitMask'は実際にあなたのセットのビットマスクを作成していないようです。代わりに、 "BitString"のようなものを作成しています。ここで、 'i'がBitSetにあった場合、ビット番号' i'は1に設定されます。 "1101"では、ビット番号0,2,3が1に設定されています。 "1100"のビット番号2と3は1に設定されています(ビット番号0は最も右側のビットです)。 – Dylan

    関連する問題