Was haltet ihr davon



  • Ich habe mal versucht ein Programm zu tippen, welches mir bei Eingaben von Zeichen oder Zahlen die Binäre ausgabe des chars lifert.

    // Binäre Ausgabe
    
    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    void main()
    {
      char input;
      int max;
      while(true) {
      cout<<"Anzahl des Schleifendurchlaufs (min.0 max.9): ";
      cin>>max;
      if(max>=0 && max<=9)
        break;
      else
        continue;
      }
    
      for(int i=0; i<max; i=i+1) {
        cout<<"\nZeichen: ";
        cin>>input;
    
        int d_feld[8];
        int m_feld[8];
        d_feld[0]=input;
    
        for(int i=0; i<8; i=i+1) {
          d_feld[i+1] = d_feld[i]/2;
          m_feld[i] = d_feld[i]%2;
        }
    
        cout<<input<<": ";
        for(int i=7; i>=0; i=i-1)
          cout<<m_feld[i];
      }
    
    }
    

    Gibt es eine leichtere und bessere Möglichkeit, so eine Aufgabe durchzuführen? Vielleicht eine spezielle Funktion?



  • Ja, z.B. so prüfst du ob das 128er-Bit in einem char c gesetzt ist...

    bool b128 = (c & 128); // Ergibt true wenn gesetzt, ansonsten false
    


  • Ziemlich umständlich und obendrein falsch: Du schreibst hier:

    for(int i=0; i<8; i=i+1) {
          d_feld[i+1] = d_feld[i]/2;
          m_feld[i] = d_feld[i]%2;
        }
    

    im letzten Schleifendurchlauf bei i = 7 über die Grenzen von d_feld hinaus.

    ne einfachere variante:

    #include <climits>
    #include <ostream>
    
    void binout(std::ostream& os, char c) {
      for (unsigned i = 0; i < CHAR_BIT; ++i)
        os.put((c & (1 << (CHAR_BIT - 1 - i))) ? '1' : '0');
    }
    

    [ Dieser Beitrag wurde am 02.06.2003 um 16:50 Uhr von Bashar editiert. ]



  • oder so:

    void binout(std::ostream& os, char c) {
      for (unsigned bit = 1 << (CHAR_BIT - 1); bit != 0; bit >>= 1)
        os.put(c & bit ? '1' : '0');
    }
    

    [ Dieser Beitrag wurde am 02.06.2003 um 16:56 Uhr von Bashar editiert. ]



  • Ne andere Möglichkeit wäre noch std::bitset. Aber der frisst glaub ich nur unsigned long...



  • Hallo.
    Nur so nebenbei: Es ist eine schlechte Angewohnheit, die main-Funktion als "void" zu deklarieren.

    cu
    BodPa



  • Original erstellt von BodPa:
    **Hallo.
    Nur so nebenbei: Es ist eine schlechte Angewohnheit, die main-Funktion als "void" zu deklarieren.

    cu
    BodPa**

    Und wieso bitte soll diese Angewohnheit schlecht sein?



  • Original erstellt von <cc>:
    Und wieso bitte soll diese Angewohnheit schlecht sein?

    weil main laut Standard int zurückgeben muss!

    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=main#Answ

    außerdem solltest du die ++ Operatoren bzw. <op>= Operatoren benutzen, da diese schneller sind, als die Verwendung von a=a<op>b



  • Statt:

    void main ()
    {
    ...
    }

    müsste es eigentlich heißen :

    int main ()
    {
    ...
    return 0;
    }

    und statt i=i+1; schreibt man für gewöhnlich ++i;
    Auch möglich: i+=1;


Anmelden zum Antworten