Scala Bitset 到 BitMask 转换

Scala Bitset toBitMask transformation

BitSettoBitMask 说明 Creates a bit mask for this set as a new array of longs。但我不明白 toBitMask 是如何真正创建位掩码的。例如,我有下一个代码:

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

1。它 return 是 64,为什么它 return 恰好是 64?

另一个例子

  val nums1 = BitSet(3, 2).toBitMask
  val nums2 = BitSet(3, 2, 0).toBitMask
  1. 为什么 nums1 = 12 而 nums2 = 13?

看起来发生的事情是 .toBitMask 将 BitSet 中的每个数字视为 "this bit number will be set to 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 的二进制。