|  | 
        
            | 
                    
                        | BitArray Koleksiyonu |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Bildiğiniz gibi byte değişkenler bellekte 
8 bit yer işgal etmektedir. Bu 8 bit 1’lerle doldurulduğunda değişkenin içeriği 
255 olmaktadır. Benzer şekilde short değişkenler 16 bitliktir ve bu 16 bit 
1’lerle doldurulduğu zaman değişkenin içeriği 65535 olabilmektedir. Söz konusu edilecek 
değişkenin bitleri ile ilgileniyorsanız BitArray sınıfından yararlanıp ilgili 
değişkenin bitlerinden bir dizi değişken veya koleksiyon hazırlayabilirsiniz. Bu 
konuda bilgi vermek için aşağıda verdiğim kodu hazırladım. 
 
 
	Bu kodda önce 1 elemanlı byte tipinde bir dizi 
değişken tanımladım ve ilk elemanına 255 sayısını aktardım. Bu sayede byte tipindeki 
dizi değişken için ayrılan 8 bitin tümü 1 değerini içermiş oldu. Devamında System.Collections 
adlı Namespace’te yer alan BitArray sınıfı için değişken tanımlayıp BitArray 
nesnesi hazırladım. BitArray sınıfının yapıcı metoduna parametre olarak verdiğim 
Byte tipindeki dizi değişken yalnızca 1 elemana sahip olduğu için BitArray nesnesi 
toplam 8 elemana sahip olur. Bu dizi değişken 2 elemana sahip olsaydı BitArray nesnesi 
veya koleksiyonu 16 elemana sahip olurdu. BitArray koleksiyonun eleman sayısını 
öğrenmek istiyorsanız Count özelliğine bakabilirsiniz.
BitArray sınıfının yapıcı metodu bool, byte ve int tipinde dizi değişkenleri 
parametre olarak almaktadır. Daha önce 1 elemanlı bir byte dizisi hazırladığım için 
bu dizi değişkeni yapıcı metoda parametre olarak verdim. Bu hazırlıklardan sonra 
BitArray tipindeki dizi değişkenin veya koleksiyonun elemanları okunabilir.
BitArray koleksiyonun elemanları okunurken Get() metodu kullanılmaktadır. 
Get() metodunun nasıl kullanıldığını anlatmak için forma 4 TextBox yerleştirdim 
ve yukarıda verdiğim satırlara ekleme yaptım.
		| byte[] Dizi = new byte[1]; Dizi[0] = 255;
 System.Collections.BitArray Bit_dizisi;
 Bit_dizisi = new System.Collections.BitArray(Dizi);
 |  
 
 
	Bu kod işletildiğinde TextBox’ların hepsine birden 
True bilgisi aktarılır. Çünkü Byte tipindeki dizi değişkenin ilk elemanına 255 aktardığım 
için bütün bit’ler 1 değerini içermektedir. İlgili bit 1 ise Get() metodu geriye 
True, 0 ise false göndermektedir. Dizi değişkenin ilk elemanına 255 yerine 10 sayısını 
aktarmış olsaydım bellekteki yerleşim aşağıdaki gibi olurdu.
		| private void Form1_Click(object sender, 
		EventArgs e) {
 byte[] Dizi = new byte[1] ;
 Dizi[0] = 255;
 System.Collections.BitArray Bit_dizisi;
 Bit_dizisi = new System.Collections.BitArray(Dizi);
 textBox1.Text = Bit_dizisi.Get(0).ToString();
 textBox2.Text = Bit_dizisi.Get(1).ToString();
 textBox3.Text = Bit_dizisi.Get(2).ToString();
 textBox4.Text = Bit_dizisi.Get(3).ToString();
 }
 |  
 Bu şartlarda yukarıdaki kod işletildiğinde ilk 
TextBox’a False, ikincisine True, üçüncüsüne yine false ve 4.cüye true bilgisi aktarılırdı. 
Aşağıda verilen ekran görüntüsünü Byte tipindeki dizi değişkenin ilk elemanına 10 
sayısını aktarıp verdiğim kodu işlettikten sonra aldım.
 
 
  
 Şimdi yukarıda verdiğim kodda değişiklik yapıp 
dizi değişkene aktarılmış olan sayının eksi olup olmadığını öğreneceğim. Dizi değişkenin 
int tipinde ve 4 elemana sahip olmasını sağladım. Bildiğiniz gibi int değişkenler 
bellekte 32 byte yer kaplamaktadır ve değişken eksi değer içeriyorsa sol taraftaki 
ilk byte 1, eksi değilse 0 sayısını içermektedir. Bu nedenle int tipindeki bir değişkene 
-10 sayısı aktarıldığında bellekteki yerleşim aşağıdaki gibi olur.
 
 
 
	Buna göre int tipindeki dizi değişkenin ilk elemanın 
eksi değer içerip içermediğini öğrenmek için sağdan son bite veya soldan ilk bite 
bakmak gerekmektedir. Bu nedenle aşağıda verdiğim kodda sıra numarası 31, 63, 95 
ve 127 olan bitleri araştırdım.Aşağıda verdiğim kodda int tipindeki dizi değişken 
toplam 4 elemana sahip olduğu için BitArray dizisi 32*4=128 elemanlı olur.
		| 1 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 0 
 
 | 1 
 
 | 0 
 
 | 1 
 
 | 0 
 
 |  
		| 31 
 
 | 30 
 
 | 29 
 
 | 28 
 
 | 27 
 
 | 27 
 
 | 25 
 
 | 24 
 
 | 23 
 
 | 23 
 
 | 21 
 
 | 20 
 
 | 19 
 
 | 18 
 
 | 17 
 
 | 16 
 
 | 15 
 
 | 14 
 
 | 13 
 
 | 12 
 
 | 11 
 
 | 10 
 
 | 9 
 
 | 8 
 
 | 7 
 
 | 6 
 
 | 5 
 
 | 4 
 
 | 3 
 
 | 2 
 
 | 1 
 
 | 0 
 
 |  
 
 
	Bu kodda Get() metodu ile ilk olarak 32. 
elemanı(elamanlar 0’dan başlanarak numaralandığı için 31. elemanı parametre olarak 
verdim) okudum. Bu eleman -10 sayısını içeriği için “Bit.Get(31)” metodu geriye 
True bilgisini gönderir. Devamında bu kez 63. elemanı okudum. int tipindeki dizi 
değişkenin 2. elemanın temsil eden 32 bit BitArray koleksiyonunda 32’den başlayıp 
63’te bitmektedir. Bu şartlarda bu kod işletildiğinde aşağıdaki gibi bir sonuç alınır.
		| private void Form1_Click(object sender, 
		EventArgs e) {
 int[] Dizi = new int[4] ;
 Dizi[0] = -10;
 Dizi[1] = 10;
 Dizi[2] = -100;
 Dizi[3] = 100;
 System.Collections.BitArray Bit_dizisi;
 Bit_dizisi = new System.Collections.BitArray(Dizi);
 textBox1.Text = Bit_dizisi.Get(31).ToString();
 textBox2.Text = Bit_dizisi.Get(63).ToString();
 textBox3.Text = Bit_dizisi.Get(95).ToString();
 textBox4.Text = Bit_dizisi.Get(127).ToString();
 }
 |  
 
  
 Yukarıda BitArray() sınıfının yapıcı metoduna önce 
byte, sonra int tipinde dizi değişkeni parametre olarak verdik. Şimdi ise bool 
tipindeki bir dizi değişkeni parametre olarak verip BitArray nesnesi hazırlayacağım.
 
 
 
	bool değişkenler bellekte 1 byte yer kapladıkları 
için bu kod ile hazırlanan BitArray nesnesi toplam 4 elemana sahip olur. Bu örnekte 
bool tipinde dizi değişken tanımladıktan sonra elemanlarına değer aktardım. Dizi 
değişkenin elemanlarına değer aktarmasaydım bütün elemanların false olduğu varsayılırdı. 
Yukarıda BitArray nesnesinin eleman sayısı yapıcı metoda parametre olarak verilen 
dizi değişkenin tipine ve eleman sayısına göre belirleniyordu. İsterseniz BitArray 
nesnesinin eleman sayısını kendiniz belirleyebilirsiniz. Bu işlemin nasıl yapıldığını 
aşağıda görebilirsiniz.
		| private void Form1_Click(object sender, 
		EventArgs e) {
 bool[] Dizi = new bool[4] ;
 Dizi[0] = false;
 Dizi[1] = true;
 Dizi[2] = false;
 Dizi[3] = false;
 System.Collections.BitArray Bit_dizisi;
 Bit_dizisi = new System.Collections.BitArray(Dizi);
 textBox1.Text = Bit_dizisi.Get(0).ToString();
 textBox2.Text = Bit_dizisi.Get(1).ToString();
 textBox3.Text = Bit_dizisi.Get(2).ToString();
 textBox4.Text = Bit_dizisi.Get(3).ToString();
 }
 |  
 
 
	Bu 2 satır sayesinde 8 elemanlı bir BitArray nesnesi 
hazırlanmış olur ve başlangıçta bütün elemanlar false bilgisini içerir. Bu şekilde 
BitArray nesnesi hazırlarken yapıcı metoda 2. parametre olarak True bilgisini verirseniz 
bütün elemanların başlangıç içerikleri true olur.
		| System.Collections.BitArray Bit_dizisi; Bit_dizisi = new System.Collections.BitArray(8);
 |  
 
 
	SetAll() ve Set() Metotları
		| System.Collections.BitArray Bit_dizisi; Bit_dizisi = new System.Collections.BitArray(8, true);
 |  
 Herhangi bir teknikle hazırlamış olduğunuz BitArray 
nesnesinin elemanlarının içeriğini değiştirmek istiyorsanız Set() veya 
SetAll() metotlarından yararlanabilirsiniz. Bütün elemanların True olmasını 
istiyorsanız SetAll() metodunu aşağıdaki gibi kullanabilirsiniz.
 
 SetAll() metoduna parametre olarak false vermeniz 
halinde bütün elamanlar false olur. Bütün elemanları false veya true yapmak yerine 
istediğiniz elemanın içeriğinde ayarlama yapmak istiyorsanız Set() metodunu 
kullanmalısınız. Set() metodu 2 parametreye sahiptir. İlk parametrede içeriği değişecek 
elemanın sıra numarası, 2. parametrede ise söz konusu elemana aktarılmak istenen 
bilgi(true veya false) verilmektedir. Set() metodu aşağıdaki gibi kullanıldığında 
BitArray nesnesinin ilk elemanı true olur.
 
 BitArray nesnesinin elemanların bilgi aktarırken 
Set() metodu yerine elemanlara aşağıda yapıldığı gibi istediğiniz elemana true veya 
false bilgisini aktarabilirsiniz.
 
 
 
	Not(), And() ve Or() Metotları
		| Bit_dizisi[0] = false; Bit_dizisi[1] = true;
 |  
 BitArray nesnesinin false olan elemanlarını true, 
true olanları ise false yapmak istiyorsanız Not() metodunu kullanabilirsiniz. 
Not() metodunun nasıl kullanıldığını aşağıda görebilirsiniz. Bu kod işletildiğinde 
ilk TextBox’a true, ikincisine false yazılır. Çünkü Not() metodu kullanılmadan önce 
ilk eleman false, ikincisi ise true idi.
 
 
 
	And() metodu 2 BitArray nesnesinin elemanlarını 
bire bir karşılaştırıp And operatörünü uygular ve geriye başka bir BitArray 
nesnesi gönderir. Bu metot hakkında bilgi vermek için 3 adet BitArray nesnesi hazırladım 
ve ilkinin elemanlarına sırayla false, true, false, ikincinin elemanlarına ise Set() 
metodu ile false, true, true bilgilerini aktardım.
		| System.Collections.BitArray Bit_dizisi; Bit_dizisi = new System.Collections.BitArray(2);
 Bit_dizisi.Set(0, false);
 Bit_dizisi.Set(1, true);
 Bit_dizisi.Not();
 textBox1.Text = Bit_dizisi.Get(0).ToString();
 textBox2.Text = Bit_dizisi.Get(1).ToString();
 |  
 
 
	Bu şekilde üçer elemanlı 2 BitArray nesnesi hazırlayıp 
elemanlarına bilgi aktardıktan sonra And() metodunu aşağıdaki gibi kullandım. BitArray() 
nesnesinin birisi And() metodunun soluna yazılmakta, diğeri parametre olarak verilmektedir. 
Bu işlemden sonra “Dizi_3” adını verdiğim BitArray nesnesinin elemanları sırayla 
false, true, false olur
		| private void Form1_Click(object sender, 
		EventArgs e) {
 System.Collections.BitArray Dizi_1, Dizi_2, Dizi_3;
 Dizi_1 = new System.Collections.BitArray(3);
 Dizi_2 = new System.Collections.BitArray(3);
 
 Dizi_1.Set(0, false);
 Dizi_1.Set(1, true);
 Dizi_1.Set(2, false);
 Dizi_2.Set(0, false);
 Dizi_2.Set(1, true);
 Dizi_2.Set(2, true);
 }
 |  
 
 
	Bu örnekte And() yerine Or() metodunu kullanmış 
olsaydım metodun geriye gönderdiği BitArray nesnesinin elemanları sırayla False, 
True, True olurdu. BitArray sınıfının Nor, And, Or’dan başka ayrıca Xor() metodu 
da bulunmaktadır.
		| Dizi_3 = Dizi_1.And(Dizi_2); |  
 
 
	BitArray sınıfına IEnumerator arayüzü uygulandığı 
için GetEnumerator() metodu ile BitArray nesnesinin numaralı bir listesini 
hazırlayabilirsiniz. Bu konuda bilgi vermek için aşağıdaki gibi kod yazarak basit 
bir BitArray nesnesi hazırladım ve elemanlarını forma yerleştirmiş olduğum ListBox’a 
aktardım.
		| Dizi_3 = Dizi_1.Or(Dizi_2); |  
 
 
	Burada BitArray nesnesini hazırlayıp elemanlarının 
içeriklerini ayarladıktan sonra IEnumerator tipinde bir değişken tanımlayıp
GetEnumerator() metodu ile BitArray nesnesinin bütün elemanlarını IEnumerator 
koleksiyonuna. Devamında for döngüsü ile sıralı listeden okuma yaptım.
		| System.Collections.BitArray Dizi; Dizi = new System.Collections.BitArray(4);
 
 Dizi.Set(0, false);
 Dizi.Set(1, true);
 Dizi.Set(2, false);
 Dizi.Set(3, false);
 
 IEnumerator Liste;
 Liste = Dizi.GetEnumerator();
 for (; Liste.MoveNext(); )
 listBox1.Items.Add(Liste.Current.ToString());
 |  
 Memik YANIK
 [email protected]
 www.memikyanik.com
 
                Makale:BitArray Koleksiyonu C#, Visual C# ve .NET Memik Yanık
 | 
        
            |  | 
        
            |  | 
        
            | 
                    
                        
                            
                        
                            Eklenen Son 10 
                            Bu Konuda Geçmiş 10 
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                            Son Eklenen 10 Makale Yükleniyor
                         
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         | 
        
            |  |