Şimdi Ara

C'de Bitwise ve Maskeleme

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
6
Cevap
0
Favori
955
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar bitwise kullanarak OR ve AND operatörleri ile sayıları kontrol ettiğimizi biliyorum, ancak maskeleme olayını anlayamadım. Kısa bir özet geçebilecek biri var mı?

    Sınavımızda şöyle bir soru geldi ve kimse yapamadı, soruyu yapabilen olursa çok sevinirim.

    SORU:

    32 bitlik sıfırdan farklı unsigned int bir sayıyı parametre olarak alan ve bu sayının en değerli biti ile en değersiz bitinin onluk(decimal) karşılığı arasındaki farkı bulan ve bu değeri geri döndüren "hesapla" isimli fonksiyonu yazınız.(Örneğin 8 bitlik 01010100 sayısındaki en değeri bitin onluk karşılığı: 64 iken en değersiz bitin onluk karşılığı 4'tür.)

    Fonksiyon prototipi: unsigned int hesapla(unsigned int);

    ÇÖZÜM:

    ???



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BD34D4651 -- 3 Haziran 2017; 13:14:2 >



  •  
    #include<stdio.h>

    unsigned int hesapla(unsigned int);
    int main()
    {
    unsigned int sayi;
    printf("sayi: ");
    scanf("%d", &sayi);
    printf("En degerli - En degersiz = %d", hesapla(sayi));

    return 0;
    }

    unsigned int hesapla(unsigned int sayi)
    {
    int kalan;
    int enDegersiz=0, enDegerli, kat=1;

    while(sayi != 0) {
    kalan = sayi%2;

    if(kalan==1)
    {
    if(enDegersiz==0)
    {
    enDegersiz=kat;
    }

    enDegerli=kat;
    }

    sayi = sayi/2;
    kat*=2;
    }

    return enDegerli-enDegersiz;
    }
  • hyrgul H kullanıcısına yanıt
    Cevabınız için teşekkür ederim hocam, mantığını pek anlayamadım ama kısa bi özet geçebilirseniz çok sevinirim.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Decimal sayıyı binary sayıya çevirmeden işlem yapılıyor.

    -Sayı sıfır olana kadar 2'ye bölünüyor.
    while(sayi != 0){...... sayi = sayi/2; ......}
    -Eğer kalan 1 ise değerli bittir.
    if(kalan==1)
    -İlk değerli bir en değersiz bittir.
    if(enDegersiz==0){ enDegersiz=kat; } // en başta yani sıfır iken bir kere atama yapılsın diye
    -Sonraki değerli bitler ise daha değerli bittir.
    -Ama en son değerli bit ise en değerli bittir.
    enDegerli=kat; // en değerli bit aslında bölme bitene kadar değer alıyor. En son aldığı değer en değerlisidir.
    -Döngü döndüğünde basamak değeri 2 kat arttırılıyor.
    kat*=2;
  • hyrgul H kullanıcısına yanıt
    Teşekkür ederim büyük faydası dokundu hocam, sağolun :)

    < Bu ileti mini sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.