Bit alanları
- C kursu
- Orta seviye
- Ders 40/116
- 5 dk
Bit alanları (bit fields) ile bellek tasarrufu öğrenirsin.
Bit alanları
Bit alanları (bit fields), bir struct'ta üyeleri bayt değil bit cinsinden tanımlamanın yoludur. Bu, bellek sıkıştırma ve bayrak (flag) yönetimi için kullanılır.
Örnek: struct Flags { unsigned a : 3; unsigned b : 1; };. Burada a 3 bit, b 1 bit kaplar. a 0-7 arası değer tutar. Tüm struct yalnızca 4 bit (yarım bayt) kaplar; derleyici bunu en az 1 bayta tamamlar. Bu, gömülü sistemlerde, protokol başlıklarında ve donanım kayıtlarında yaygındır. Bit alanları bellek tasarrufu sağlar ama taşıma (portability) açısından dikkat ister.
Bit alanı örneği
Bit alanları, değer atandığında otomatik olarak maskelenir. unsigned a : 3; alanına 5 yazarsan 5 saklanır; 9 yazarsan taşma olur ve yalnızca alt 3 bit (1) saklanır.
Örnek: struct Flags f; f.a = 5; f.b = 1;. Burada f.a 5 (101 ikili), f.b 1 (1 ikili). Eğer f.a = 9; yazarsan 9'un alt 3 biti 1'dir; bu yüzden f.a 1 olur. Bu otomatik maskeleme, donanım kayıtlarını modellemek için uygundur. Yine de okunurluk için taşma değerlerinden kaçınmak iyi bir alışkanlıktır.
Uygulama Bit alanı ile bayrak yazdır
struct Flags tanımla: unsigned a : 3; ve unsigned b : 1;. main içinde struct Flags f; yaz; f.a = 5; ve f.b = 1; ata. printf("%d %d\n", f.a, f.b); ile yazdır.
Başlangıç kodu
#include <stdio.h>
// struct Flags tanımla (a 3 bit, b 1 bit)
// main'de f tanımla, a'yı 5, b'yi 1 yap ve yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
struct Flags {
unsigned a : 3;
unsigned b : 1;
};
int main(void) {
struct Flags f;
f.a = 5;
f.b = 1;
printf("%d %d\n", f.a, f.b);
return 0;
}Beklenen çıktı
5 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bit alanı ifadelerini eşle
| Kavram | Anlamı |
|---|---|
unsigned a : 3 |
3 bitlik alan |
unsigned b : 1 |
1 bitlik alan |
struct Flags |
Bayrak yapısı |
: 3 |
Bit genişliği |
2 Bit genişliğini tamamla
struct Flags { unsigned a : ____; unsigned b : 1; };
struct Flags { unsigned a : 3; unsigned b : 1; };
Açıklama: 3 bitlik alan 0-7 arası değer tutar.
3 unsigned a : 3; kaç bit kullanır?
- 1
- 3 Doğru cevap
- 32
- 0
Açıklama: 3 bitlik alan 0-7 arası değer tutar.