Bit Düzeyinde İşlem Örneği

Başlatan Jey@Nfer, 28 Mayıs 2011 - 17:52:17

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

Jey@Nfer

Arkadaşlar sistem programlamada sık sık karşımıza çıkan bit düzeyinde işlem ile ilgili örnekler çok az sayıda ve ben de az önce meraktan yazdığım örneği sizinle paylaşmak istedim..
umarım faydalı olur..



struct sekizbitlik { unsigned sifir:1 , bir:1, iki:1, uc:1, dort:1, bes:1, alti:1, yedi:1 };

union ortak { unsigned int sayi; struct sekizbitlik bit } x;

struct sonuc { struct sekizbitlik sonsekizli; int adet; };

struct sonuc birleribul();

main()
{
    int adet;

    printf("Sayiyi giriniz ...\n");
    scanf("%d",&x.sayi);

    adet=birlerisay(x);

    printf("Birlerin sayısı : %d \n",adet);
}

birlerisay(union ortak x)
{
    struct sonuc bitler;
    struct sekizbitlik birolanbitler={0};

    bitler=birleribul(x);

    birolanbitler=bitler.sonsekizli; //burada aslında önemli bi şey yapılmıyor sadece yapıyı başka bir yapıya kopyalıyoruz sırf atamaya örnek olsun diye var yani:D

    printf("\n=============================================\n\n");

    birleribul(birolanbitler);

return bitler.adet;
}

struct sonuc birleribul(union ortak x)
{
struct sonuc bitler;

printf("sıfır : %d \n",x.bit.sifir);
printf("bir   : %d \n",x.bit.bir);
printf("iki   : %d \n",x.bit.iki);
printf("uc    : %d \n",x.bit.uc);
printf("dort  : %d \n",x.bit.dort);
printf("bes   : %d \n",x.bit.bes);
printf("alti  : %d \n",x.bit.alti);
printf("yedi  : %d \n",x.bit.yedi);

bitler.adet=0;


if(x.bit.sifir) bitler.adet=bitler.adet+1;
if(x.bit.bir) bitler.adet=bitler.adet+1;
if(x.bit.iki) bitler.adet=bitler.adet+1;
if(x.bit.uc) bitler.adet=bitler.adet+1;
if(x.bit.dort) bitler.adet=bitler.adet+1;
if(x.bit.bes) bitler.adet=bitler.adet+1;
if(x.bit.alti) bitler.adet=bitler.adet+1;
if(x.bit.yedi) bitler.adet=bitler.adet+1;

bitler.sonsekizli=x.bit;

return bitler;
}



Yukardaki programa girilen sayının 2lik düzendeki karşılığı olan birlerin yerini bulur ve birlerin adedini yazar...

açıklama isteyen arkadaşlara açıklayabilirim.. Ayrıca dilerseniz bi kaç örnek daha yazıp paylaşabilirm..


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 28 Mayıs 2011 - 18:09:27

Ayrıca GCC ile derlerken niye hata alıyorum bunu çözümü bilen varsa yardımcı olabilir mi?
codeblocks ile derlerken hata almıyorum fakat gcc ile derlerken

deneme.c:1: warning: no semicolon at end of struct or union
deneme.c:3: warning: no semicolon at end of struct or union
deneme.c: In function 'main':
deneme.c:13: warning: incompatible implicit declaration of built-in function 'printf'
deneme.c:14: warning: incompatible implicit declaration of built-in function 'scanf'
deneme.c: In function 'birlerisay':
deneme.c:30: warning: incompatible implicit declaration of built-in function 'printf'
deneme.c: In function 'birleribul':
deneme.c:41: warning: incompatible implicit declaration of built-in function 'printf'

şeklinde bi hata alıyorum sorun nedir sizce? niye printflerde hata verir yani?
Hırs , azim , tevekkül ...

www.mehmetvahit.net

sem

"şeklinde bi hata alıyorum sorun nedir sizce? niye printflerde hata verir yani?"


stdio.h?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?