91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

怎樣在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
浦江县| 景谷| 宣武区| 九江市| 连城县| 启东市| 房产| 镇宁| 蚌埠市| 循化| 永宁县| 张掖市| 蒙城县| 左贡县| 鄄城县| 高陵县| 股票| 新邵县| 海城市| 临澧县| 丘北县| 满洲里市| 南陵县| 睢宁县| 永定县| 永康市| 乌兰浩特市| 大埔区| 黑山县| 额敏县| 黄冈市| 海林市| 共和县| 天峨县| 霍林郭勒市| 栾城县| 安化县| 历史| 新巴尔虎左旗| 黄浦区| 湖南省|