sayfa başı

22 Şubat 2019 Cuma

C Çalışma Soruları – 9 (tamsayının bitlerini yazdırmak)

Necati Ergin Hocamın kendi sayfasında bulunan çalışma sorularını ve cevaplarını burada yanıtlamaya çalıştım. Sorulara buradan ulaşabilirsiniz.

Kendisine gönderilen işaretli tam sayıyı ikilik sayı sisteminde standart output‘a yazan bprint isimli işlevi tanımlayınız: 

  void bprint(int val);
Standart ouput‘a yazılacak bit sayısı sistemin int türünün bit sayısı kadar olmalıdır.
Tanımladığınız işlevi aşağıdaki programla test edebilirsiniz:


include <stdlib.h>
 
void bprint(int val);
 
int main()
{
 char str[sizeof(int)* 8 + 1];
 int ival;
 
 do {
  printf("bir tamsayi giriniz: ");
  scanf("%d", &ival);
  itoa(ival, str, 2);
  printf("%0*s\n", sizeof(int)* 8, str);
  bprint(ival);
  printf("\n");
 } while (ival != 0);
 
 return 0;
}

Yanıt:
Necati hoca printf boşlukları 0 ile doldurma özelliğini kullanarak kısa ve güzel bir çözüm sunmuş. Bu soruyu çözmekten ziyade bu çözümü öğrenmek daha fazla katkı sağlıyor. Printf için detaylı bilgiye buradan ulaşabilirsiniz.

#include <stdlib.h>
#include <stdio.h>
 
void bprint(int val)
{
    int i;
    int intBitSize = sizeof(int)* 8;
    char str[intBitSize + 1] ; // +1 for end of string char \0
        
    for (i = intBitSize-1; i >= 0; i--)
    {
        if (val & 0x01)
        {
            str[i] = '1';
        }
        else
        {
            str[i] = '0';
        }
        
        val = (val >> 1);
    }
    
    str[intBitSize] = '\0'; // add null char    
    
    printf("%s \n",  str);    
}
 
int main()
{
    char str[sizeof(int)* 8 + 1]; // +1 for end of string char \0
    int ival;

    do 
    {
    printf("bir tamsayi giriniz: ");
    scanf("%d", &ival);
    
    /* Necati hocanın çözümü */
    itoa(ival, str, 2); //ikilik sayı sistemi biçiminde string dönüşüyor.
    printf("%0*s\n", sizeof(int)* 8, str); // 0 -> Field is padded with 0's instead of blanks.
    
    bprint(ival);
    
    printf("\n");
    } while (ival != 0);
 
 return 0;
}

Hiç yorum yok:

Yorum Gönder

Son Ütücü