08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

iki saklama biriminde mi tutulacağı yoksa tamamen yeni saklama biriminde mi yer<br />

alacağı derleyicinin seçimine bırakılmıştır. Bir elemanın ilgili bit alanı içinde yerleşiminin<br />

soldan sağa ya da sağdan sola olması da yine derleyicinin seçimine bırakılmıştır.<br />

Bir bit alanı uzunluğu saklama biriminin kendi uzunluğundan daha büyük olamaz.<br />

Örneğin saklama birimi 8 bit ise 9 bitlik bir bit alanı eleman kullanılmaz.<br />

Bit alanı elemanların yerleşimi üzerinde daha fazla denetimin sağlanması için, elemana<br />

isim vermeme olanağı da getirilmiştir. Bir bit alanı elemana isim verilmeyebilir. İsmi<br />

olmayan bir bit alanı elemanı içi derleyici yine gerekli yeri ayırır. Böylece programcı<br />

kullanacağı elemanların içsel yerleşimini kendine göre ayarlayabilir.<br />

typedef struct {<br />

int : 5;<br />

int hour : 5;<br />

int min : 6;<br />

}Time;<br />

Yukarıdaki örnekte Time yapısının isim verilmeyen birinci elemanı için, derleyici yine 5 bit<br />

ayırır. Yani yapının hour isimli elemanı 5. bitten başlayarak yerleştirilir.<br />

Bir başka olanak da, bit alanı elemanın uzunluğunu 0 olarak belirlemektir. Bunun<br />

önceden belirlenmiş özel bir anlamı vardır. Bir elemanın uzunluğunun 0 olduğunu gören<br />

derleyici bir sonraki elamanı yeni bir saklama biriminden başlatır:<br />

Aşağıdaki ilgili sistemin saklama birimi uzunluğu bit sayısı olarak elde ediliyor:<br />

#include <br />

#include <br />

typedef struct {<br />

int : 1;<br />

int : 0;<br />

int : 1;<br />

}StorageCheck;<br />

int main()<br />

{<br />

printf("Saklama birimi = %u bit\n", sizeof(StorageCheck) / 2 *<br />

CHAR_BIT);<br />

}<br />

return 0;<br />

Yukarıdaki örnekte StorageCheck isimli yapı tanımlanıyor. Bu yapının isim verilmeyen ilk<br />

bitalanı elemanı için 1 bit yer ayrıldığını görüyorsunuz. İkinci eleman için ise uzunluk 0<br />

olarak belirleniyor. Son elemanın uzunluğu yine 1 bitdir. Derleyici 3. eleman için gereken<br />

yeri bir sonraki saklama biriminden ayırır. Bu durumda eğer saklama birimi 8 bit ise<br />

yapının toplam uzunluğu 16 bit, saklama birimi 16 bit ise yapının uzunluğu 32 bit nihayet<br />

saklama birimi 32 bit ise yapının uzunluğu 64 bit olur.<br />

443

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

Saved successfully!

Ooh no, something went wrong!