中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

怎樣在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
筠连县| 高淳县| 盐山县| 定陶县| 汤原县| 平昌县| 九龙县| 邵阳市| 绥化市| 张北县| 泾川县| 北海市| 济阳县| 家居| 卢氏县| 浦东新区| 沭阳县| 嘉义市| 招远市| 夹江县| 五台县| 衡南县| 小金县| 道真| 岢岚县| 孝昌县| 大渡口区| 山阳县| 双江| 财经| 新民市| 沅陵县| 台前县| 天全县| 长寿区| 新余市| 哈尔滨市| 灵山县| 招远市| 鄂伦春自治旗| 巫溪县|