2017-01-09 237 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