C

Bitlerin içerisine veri saklamak

Bir program yazdığınızı ve bu program için tarih verisini tutan bir veri yapısına ihtiyacınız olduğunu hayal edin. Eğer C dilini kullanıyorsanız yapacağınız ilk şey bir struct oluşturmak olacaktır.

Veri yapımız bu şekliyle 20 byte yer kaplamaktadır. İlk başta bu kulağa çok büyük bir sayı gibi gelmiyor olabilir, fakat bir düşünün. Sırf 1-12 arasında değerler alabilen ayları hafızada tutmak için 2^32 farklı değer alabilen 4 bytelık bir hafıza bloğu kullandık. Aynı şekilde yıl hariç kalan tüm birimler 1 byte ile temsil edilebilecek kadar küçük aralıklarda değerler alıyor. O zaman gelin, veri yapısının tipleriyle biraz oynayalım.

Structımız yeni haliyle hafızada 6 bytelık yer kaplıyor. Eskisinin %30 kadarı. Fakat bu bizim için yeterli değil. 1-12 arası değer alabilen aylar için 255 farklı değer alabilen char veri tipini kullanıyoruz, aynısı diğer değişkenler için de geçerli. Hala büyük bir israf var. Artık gizli silahımızı çıkarma vakti geldi, bitmask.

Tüm verileri bir integer sayının içerisine gömdük.

İçerisine verilerimizi gömdüğümüz integer sayıyı binary formatta görüyorsunuz. Yeni yöntemimiz sayesinde hafızada char veri tipini kullanarak yaptığımız veri yapısının %65’i, diğerinin ise %20’si kadar yer kaplıyoruz . Yıl üzerinden konuşacak olursak aşamalar şu şekilde olacaktır:

  • Asıl integeri, son 12 biti 0, diğer bitleri 1 olan başka bir integer ile and’le.
  • Bir integerin değerini yıla eşitle. << operatörünü kullanarak yılın bulunduğu 12 bit, en sola yerleşene kadar kaydır.
  • Asıl integer ile yılın bulunduğu integeri or’la.

C ile yazılmış bir örneğine github sayfamdan ulaşabilirsiniz :https://github.com/farukcansaglam/date

Leave a Reply

Your email address will not be published. Required fields are marked *