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);
|
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ü