|
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.
byte[] Dizi = new byte[1];
Dizi[0] = 255;
System.Collections.BitArray Bit_dizisi;
Bit_dizisi = new System.Collections.BitArray(Dizi); |
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.
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 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.
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.
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
|
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.
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();
} |
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.
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.
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();
} |
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.
System.Collections.BitArray Bit_dizisi;
Bit_dizisi = new System.Collections.BitArray(8); |
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, true); |
SetAll() ve Set() Metotları
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.
Bit_dizisi[0] = false;
Bit_dizisi[1] = true; |
Not(), And() ve Or() Metotları
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.
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(); |
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.
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 ş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
Dizi_3 = Dizi_1.And(Dizi_2); |
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.Or(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.
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()); |
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.
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
|
|