亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

怎樣在C#里操作BitSet數據結構

c#
小樊
86
2024-09-16 09:55:24
欄目: 編程語言

在C#中,沒有內置的BitSet數據結構

using System;
using System.Collections;

public class BitSet : ICollection
{
    private readonly byte[] data;

    public BitSet(int size)
    {
        if (size < 0)
            throw new ArgumentException("Size cannot be negative", nameof(size));

        data = new byte[(size + 7) / 8];
    }

    public bool this[int index]
    {
        get => Get(index);
        set => Set(index, value);
    }

    public bool Get(int index)
    {
        CheckIndex(index);
        int byteIndex = index / 8;
        int bitIndex = index % 8;
        return (data[byteIndex] & (1<< bitIndex)) != 0;
    }

    public void Set(int index, bool value)
    {
        CheckIndex(index);
        int byteIndex = index / 8;
        int bitIndex = index % 8;

        if (value)
            data[byteIndex] |= (byte)(1<< bitIndex);
        else
            data[byteIndex] &= (byte)~(1<< bitIndex);
    }

    private void CheckIndex(int index)
    {
        if (index < 0 || index >= data.Length * 8)
            throw new ArgumentOutOfRangeException(nameof(index), "Index out of range");
    }

    // ICollection implementation
    public int Count => data.Length * 8;
    public bool IsSynchronized => false;
    public object SyncRoot => this;

    public void CopyTo(Array array, int index)
    {
        if (array == null)
            throw new ArgumentNullException(nameof(array));
        if (index < 0)
            throw new ArgumentOutOfRangeException(nameof(index), "Index cannot be negative");
        if (array.Length - index< Count)
            throw new ArgumentException("Destination array is not large enough");

        for (int i = 0; i< Count; i++)
            array.SetValue(Get(i), index + i);
    }

    public IEnumerator GetEnumerator()
    {
        for (int i = 0; i< Count; i++)
            yield return Get(i);
    }
}

使用示例:

var bitSet = new BitSet(10);
bitSet[3] = true;
bitSet[5] = true;

for (int i = 0; i < bitSet.Count; i++)
    Console.WriteLine($"Bit {i}: {bitSet[i]}");

這個實現提供了基本的BitSet功能,包括設置和獲取位。你可以根據需要擴展此類,添加更多的方法,如按位操作、轉換為字符串等。

0
桓台县| 平罗县| 茌平县| 杭州市| 精河县| 星座| 涟源市| 资阳市| 苍山县| 景德镇市| 临漳县| 永州市| 阳高县| 茂名市| 柳林县| 资溪县| 区。| 伊春市| 保康县| 邻水| 阳山县| 道孚县| 什邡市| 沾益县| 灵川县| 永善县| 大冶市| 许昌市| 吉林市| 酉阳| 弥勒县| 南昌市| 乌海市| 女性| 平昌县| 江山市| 大厂| 汝南县| 星座| 永城市| 嘉义市|