C#nedir?com
 
YAZAR HAKKINDA
Memik Yanık
Memik Yanık
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
3 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: asagida bitarray degisken degiskenin elemana false metodu nesnesi nesnesinin parametre sayisini tipinde tipindeki verdigim yapici C# / VC#/.NET Memik Yanık
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 29.9.2006
Okunma Sayısı : 18633
Yorum Sayısı : 1     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 11.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 11.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 11.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 11.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
BitArray Koleksiyonu
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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 baka­bilirsiniz. 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() meto­dunun 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çermek­tedir. İ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.

0

0

0

0

1

0

1

0

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ğla­dı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 numaralan­dığı 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 koleksiyo­nunda 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.

Bit_dizisi.SetAll(true);
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.

Bit_dizisi.Set(0, true);
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örebilirsi­niz. 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
memiky@superoline.com
www.memikyanik.com
Makale:
BitArray Koleksiyonu C#, Visual C# ve .NET Memik Yanık
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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