Binärrechner



  • Herzlich willkommen,

    bin selbst nicht der große C-Kenner aber probiere es mal so:

    #include <stdio.h>
    
    int main()
    {
    
      unsigned int value, i;
      printf("Please enter an integer:");
      scanf("%d",&value);
    
      for( i=32; i>0; --i)
      {
        if ( !(i % 8) ) printf("|");
        printf("%d",( (value>>(i-1)) &1));
      }
    
      printf("\n");
    
      return 0;
    }
    


  • Danke hat super funktioniert.

    kann man auch das erste "|" Zeichen ausblenden? Bin noch blutiger Anfänger in C 🙂
    Wenn nich macht auch nix ...

    glg



  • gerald123 schrieb:

    Danke hat super funktioniert.

    kann man auch das erste "|" Zeichen ausblenden? Bin noch blutiger Anfänger in C 🙂

    Am wenigsten Schreibarbeit macht es wohl, eine Ausnahme für den Fall hinzuzufügen, daß i 32 ist. Aber wenn du das nicht selbst siehst: wieso bedankst du dich dann bei jemandem, der dir nichts erklärt hat?



  • ^^oder z.b. so:

    void show_int (int i)
    {
        show_byte (i>>24);
        putchar ('|');
        show_byte (i>>16);
        putchar ('|');
        show_byte (i>>8);
        putchar ('|');
        show_byte (i);
    }
    

    musst nur noch 'show_byte' programmieren, d.h. eine funktion die 8 bits ausgibt.
    🙂



  • gerald123 schrieb:

    Danke hat super funktioniert.

    kann man auch das erste "|" Zeichen ausblenden? Bin noch blutiger Anfänger in C 🙂
    Wenn nich macht auch nix ...

    glg

    Wie mein Vorredener schon ausführte ist eine weitere Bedingung in der If-Abfrage der einfachste Weg das erste Trennzeichen wegzubekommen, das sollte dann so funktionieren:

    #include <stdio.h>
    
    int main()
    {
    
      unsigned int value, i;
      printf("Please enter an integer:");
      scanf("%d",&value);
    
      for( i=32; i>0; --i)
      {
        if ( !(i % 8) & i < 32 ) printf("|");
        printf("%d",( (value>>(i-1)) &1));
      }
    
      printf("\n");
    
      return 0;
    }
    

    Es tut mir leid dass ich nix erklärt habe, aber da der erste Code von ihm stammte und ich nur leichte Modifikationen vorgenommen habe ist der verwendete Algorithmus gleich geblieben. Gut eine unnötige Schleife habe ich noch wegoptimiert...

    Mit dem Ausdruck !(i % 😎 prüfe ich nur noch ob die aktuelle Stelle durch 8 teilbar ist oder wie hier implementiert der Rest einer Modulo-Operation mit 8 ergibt keinen Rest.

    Hmm wenn noch was unklar sein sollte frag einfach, dazu ist ein Forum da. Und keine Angst ein RTFM oder such in Google wirste von mir nie bekommen, denn dadurch entsteht ein Teufelskreis weil man dann genau so einen Eintrag bei Google findet indem dann steht "such in Google". 😉



  • Wie mein Vorredener schon ausführte ist eine weitere Bedingung in der If-Abfrage der einfachste Weg das erste Trennzeichen wegzubekommen, das sollte dann so funktionieren:

    Gar nicht wahr. Hatte nur gesagt, dass man so am wenigsten Tippen muss. fricky hat sich zB die drei unnötigen Vergleiche auf 32 gespart. Das ist, arguably, einfacher.



  • Ganz entspannt 😉
    Die Lösung mit der Abfrage ist wohl eine der einfachsten, wenn man den Ursprungscode übernimmt. Die Lösung von Fricky ist klar einfacher, aber hat nix mehr mit dem Grundcode von Gerald zu tun.



  • Wie der Code von justchris funktioniert war mir eigentlich schon klar, aber trotzdem danke 🙂 das ist halt viel geschickter gelöst als mit arrays 😉



  • Könnte jmd die Zeile 13 von justchris bitte genau erklären? Und warum man genau mit der Bitmaske 1 verlgeicht?
    Wäre nett! Danke schon mal 🙂



  • Du meinst

    value>>(i-1)) &1
    

    ?

    Hier wird der Value um (i-1) Bits nach rechts verschoben, so daß das aktuell benötigte Bit dann an Bitposition 0 steht.
    Und die Ver'und'ung mit 1, damit nur dieses Bit erhalten bleibt (alle größeren Bits werden dann auf 0 gesetzt), so daß dann nur noch 0 oder 1 ausgegeben wird.


Anmelden zum Antworten