CodeBlanks Logo Icon CodeBlanks

Bit manipülasyonu

Gömülüde bit manipülasyonu desenlerini öğrenirsin.

Bit manipülasyonu

Gömülü sistemlerde bir yazmacın belirli bitlerini değiştirmek yaygındır. Bir yazmaç 32 bittir; her bit bir donanım özelliğini denetler. Bit manipülasyonu, bu bitleri tek tek kurmak, temizlemek ve değiştirmektir.

Üç temel işlem: kur (reg |= (1 << n)), temizle (reg &= ~(1 << n)) ve değiştir (reg ^= (1 << n)). Burada (1 << n) bir maske (mask) üretir: yalnızca n'inci bit 1'dir. |= ile bit kurulur, &= ~ ile temizlenir, ^= ile değiştirilir. Bu işlemler atomik değildir; kesme güvenliği için dikkat gerekir.

Maske ve okuma

Belirli bir biti okumak için maske ile VE (AND) alırsın: if (reg & (1 << n)). Bu, n'inci bit 1'se doğru, 0'sa yanlış verir. Bir yazmacın alt kısmını okumak için: value = reg & 0xFF; (alt 8 bit).

Çoklu bit yazmak için önce temizle sonra kur: reg &= ~0xF; reg |= (value & 0xF);. Bu, alt 4 biti value'nun alt 4 biti ile değiştirir. Maskeleme, gömülü C'de donanım yazmaçlarının alt alanlarını yönetmenin standart yoludur. Her donanım sürücüsü bu desenleri kullanır.

Uygulama Bit kurma programı yaz

unsigned int reg = 0; tanımla. reg |= (1 << 0); ile bit 0'ı kur. reg |= (1 << 2); ile bit 2'yi kur. int main(void) içinde printf("Kayıt: %d\n", reg) ile yazdır (sonuç 5 olmalı: binary 101).

Başlangıç kodu

main.c
#include <stdio.h>

// reg tanımla ve sıfırla
// bit 0 ve bit 2'yi kur
// main'de değeri yazdır

Örnek çözüm

main.c
#include <stdio.h>

int main(void) {
    unsigned int reg = 0;
    reg |= (1 << 0);
    reg |= (1 << 2);
    printf("Kayıt: %d\n", reg);
    return 0;
}

Beklenen çıktı

Kayıt: 5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir biti kurmak için hangi işlem kullanılır?

  • reg &= ~(1 << n)
  • reg = (1 << n)
  • reg |= (1 << n) Doğru cevap
  • reg ^= (1 << n)

Açıklama: |= ile maske bitsel VEYA ile birleştirilir; bit kurulur.

2 Bit kurma işlemini tamamla

Soru
reg |= (1 << ____);  /* bit 0'ı kur */
Cevap
reg |= (1 << 0);  /* bit 0'ı kur */

Açıklama: (1 << 0) 0'ıncı biti kuran maskedir.

3 Bit işlemini eşle

Kavram Anlamı
Kur |= (1 << n)
Temizle &= ~(1 << n)
Değiştir ^= (1 << n)
Oku & (1 << n)

Uzman bölümündeki tüm dersler