using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;namespace WindowsApplication8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();            BitArray BA = new BitArray(new byte[] { (byte)'A', (byte)'B', (byte)'C' });
            byte[] BS = new byte[BA.Count];
            BA.CopyTo(BS, 0);
            MessageBox.Show(Encoding.Default.GetString(BS));
            Shr(ref BA);
            BA.CopyTo(BS, 0);
            MessageBox.Show(Encoding.Default.GetString(BS));
            Shl(ref BA);
            BA.CopyTo(BS, 0);
            MessageBox.Show(Encoding.Default.GetString(BS));
        }        void Shr(ref BitArray BA)
        {
            for (int i = BA.Count - 1; i > 0; i--)
                BA[i] = BA[i - 1];
            BA[0] = false;
        }        void Shl(ref BitArray BA)
        {
            for (int i = 0; i < BA.Count - 2; i++)
                BA[i] = BA[i + 1];
            // 左移最后第二位等于最后一位,所以最后一个字符不是C 
        }
    }
}

解决方案 »

  1.   

    楼上:这样做的话,性能是不是比bitset差很多?
      

  2.   

    應該這麼說,bitarray本來就不是設計來移位的
    要高效移位,應該先轉成int形態再操作。堅持要這樣搞的話,就自己動手
    但效能就是打折扣就是(與原生的int相比的話話
      

  3.   

    谢谢楼上各位,偶现在就是需要一个bitset@c的C#版本,效率是必须关心的,因为有几百位要处理。
    找到了一个早先的实现代码,看样子效率比BitArray放心些。
    http://www.koders.com/csharp/fid2F10AC8F6BCEEAB6DF20596BE5A60356DF32B1D9.aspx
    移位部分需要自己实现了。