CodeBlanks Logo Icon CodeBlanks

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

main.c
#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

main.c
#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

Soru
struct Flags { unsigned a : ____; unsigned b : 1; };
Cevap
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.

Orta seviye bölümündeki tüm dersler