簡體   English   中英

C# - 將數字轉換為最小 BitArray 的最快方法是什么

[英]C# - What's the fastest way to convert a number to the smallest BitArray

我想將一個數字轉換為一個 BitArray,生成的 BitArray 只需要它的大小。

例如:

BitArray tooBig = new BitArray(new int[] { 9 });

結果是一個長度為 32 位的 BitArray,但是值 9 只需要 4 位。 如何創建僅在需要時長的 BitArrays? 所以在這個例子中,4 位。 或者對於數字 260,我預計 BitArray 的長度為 9 位

您可以先找出所有位,然后通過檢查最低有效位是 1 還是 0 然后右移直到數字為 0 來創建數組。請注意,這不適用於第 32 位為 1 到的負數指示標志。

public BitArray ToShortestBitArray(int x)
{
    var bits = new List<bool>();
    while(x > 0)
    {
        bits.Add((x & 1) == 1);
        x >>= 1;
    }
    
    return new BitArray(bits.ToArray());
}

假設您只使用無符號整數,您需要的位數等於 (number+1) 的以 2 為底的對數,四舍五入。

計算位數可能是最簡單的解決方案。

例如在 JavaScript 中...

// count bits needed to store a positive number
const bits = (x, b = 0) => x > 0 ? bits(x >> 1, b + 1) : b;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM