2017-01-09 261 views
2

toBitMask的规格BitSetCreates a bit mask for this set as a new array of longs。但我不明白toBitMask真的创建一个位掩码。例如,我有下面的代码:斯卡拉Bitset toBitMask转换

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

1.它返回64,为什么它返回正好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