08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

struct file_date {<br />

unsigned int day: 5;<br />

unsigned int mon: 4;<br />

unsigned int year: 7;<br />

};<br />

Yukarıdaki bildirimden de görüldüğü gibi, tarih bilgisinin yılı için 7 bitlik bir alan<br />

ayrılmıştır. 7 bitlik bir alanda tutulabilecek en büyük değer 127 dir. DOS işletim<br />

sisteminde böyle bir bit alanında yıl değerinin 1980 fazlası tutulur.<br />

Aşağıdaki işlev file_date yapısı içinde tutulan tarih bilgisini ekrana yazdırıyor:<br />

void display_file_date(const file_date *ptr)<br />

{<br />

printf("%02u/%02u/%u", ptr->day, ptr->mon, ptr->year);<br />

}<br />

Bir yapının bit alanı elemanlarına, yine nokta ya da ok işleçleriyle erişilir. Şüphesiz,<br />

derleyicinin ürettiği kod bitsel işlemlerin yapılmasını sağlar.<br />

Bu kez zaman bilgisini tutmak için elemanları bit alanları olan bir yapı bildiriliyor:<br />

struct file_time {<br />

unsigned int hour: 5;<br />

unsigned int min: 6;<br />

unsigned int sec: 5;<br />

};<br />

Zaman bilgisinin saniye değeri için 5 bitlik bir alan ayrılıyor. 5 bitlik bir alanda<br />

tutulabilecek en büyük değer 31'dir. DOS işletim sisteminde, böyle bir bit alanında gerçek<br />

saniye değerinin yarısı tutulur.<br />

Aşağıdaki işlev file_time yapısı içinde tutulan zaman bilgisini ekrana yazdırıyor:<br />

void display_file_date(const file_time *ptr)<br />

{<br />

printf("%02u:%02u%u", ptr->hour, ptr->min, 2 * ptr->sec);<br />

}<br />

Bitalanı Elemanların Adresleri<br />

Bir bitalanı elemanın adresi alınamaz. Bir bit alanı elemanın adres işlecinin terimi olması<br />

geçersizdir:<br />

#include <br />

void func();<br />

{<br />

struct file_date fdate;<br />

}<br />

scanf("%d", &fdate.day); /* Geçersiz */<br />

/***/<br />

Bit Alanlarının Bellekte Yerleşimi<br />

Bir bit alanının bellekte yerleşimi konusunda derleyiciler geniş ölçüde serbest<br />

bırakılmıştır. Bit alanlarının bellekte yerleşimi "saklama birimi" (storage unit) isimli bir<br />

terimle açıklanır. Saklama birimi, belirli bir byte uzunluğudur ve derleyicinin seçimine<br />

bağlıdır. Örneğin derleyicinin seçtiği saklama birimi 1, 2, 4 vs. byte olabilir.<br />

Bit alanlarının bildirimiyle karşılaşan derleyici bit alanlarını, aralarında boşluk bırakmadan<br />

tek bir saklama birimine yerleştirmeye çalıştırır. Saklama biriminde bir bit alanı içinde<br />

yeteri kadar yer kalmaz ise bir sonraki saklama birimine geçilir. Sığmayan elemanın her<br />

442

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!