Wie kann ich short binär ausgeben?



  • ok, aber muss das nicht auch einfach gehen? Denn in einem tutorial, lautet die aufgabe:

    0x55 in binärschreibweise, NUR mithilfe der bitoperationen...



  • mach ne union mit short und bool und interpretiere true als 1 und flase als 0



  • Geh einfach jedes bit durch und geb aus ob es gesetzt ist oder nicht.
    Die entsprechenden Werte entweder selber ausrechnen oder die 1 durchshiften. Auf die richtige Bitoperation wirst du hoffentlich selber kommen 😉



  • nein, eigentlich komm ich nciht drauf!

    HAb auch das mit dem union nicht verstanden 😕



  • Bitoperation schrieb:

    nein, eigentlich komm ich nciht drauf!

    HAb auch das mit dem union nicht verstanden 😕

    Irgendwie so sollte es doch gehen...

    short int x = 16;
    
    for (unsigned int i1 = 0; i1 < 15 /* (oder 14?) */; i1++) {
      cout << (x & 0x1);
      x = x << 1;
    }
    

    ... und dann die Ausgabe umdrehen



  • Klasse: also das mit den Bitoperationen versteh ich nicht so richtig..... =(!

    Wäre auch über ein beispiel der anderen beiden möglichkeiten dankbar!



  • Natürlich in die richtige Richtung shiften!!!

    [cpp]
    short int x = 16;

    for (unsigned int i1 = 0; i1 < 15 /* (oder 14?) */; i1++) {
    cout << (x & 0x1);
    x = x >> 1;
    }
    [/cpp]

    ... und dann die Ausgabe umdrehen[/quote]



  • Wenn du dir das "Ausgabe umdrehen" sparen willst

    kannst du natürlich auch nach links shiften und mit 16tausenschlagmichtod (2^16-1) &'en

    also

    cout << (x & 16XXX);
    x = x << 1;



  • Hmm... nicht eher sowas hier?

    short x=10;
    int i;
    for(i=1;i<=x;i*=2);
    for(;i>0;i/=2)
      cout<<((x&i)>0);
    

    EDIT: Verdammt... wie blöd, wenn man lange kein Standard-C++ gemacht hat ^^ Nach 4x Editieren sollte es so aber mal funzen...



  • #include <iostream>
    
    int main()
    {
      unsigned short num = 4242;
    
      const unsigned short short_bits = sizeof(unsigned short) * 8;
      unsigned short bit = 1 << short_bits-1;
      do {
        std::cout << ((num & bit) != 0);
        bit >>= 1;
      } while (bit != 0);
      std::cout << std::endl;
    }
    


  • Hmm... der Code ist mir zu lang... hier ist das, wie ich es gemacht hab und es läuft einwandfrei:

    #include <cstdlib>
    #include <iostream>
    using namespace std;
    int main(int argc, char *argv[])
    {
        int x=10385;
        int i;
        for(i=1;i<x;i*=2);
        for(;i>0;i/=2)
            cout<<((x&i)>0);
        cout<<endl;
        getchar();
        return 0;
    }
    


  • Windoof schrieb:

    for(i=1;i<x;i*=2);
    

    Die ist wirklich übel. Wie wär's mit nem Kommentar, in der nächsten Zeile am besten?



  • finix schrieb:

    const unsigned short short_bits = sizeof(unsigned short) * 8;
    

    hätt' ich das geschrieben dann hätte mir jetzt einer erzählt man solle CHAR_BIT statt 8 verwenden 😉



  • finix schrieb:

    Die ist wirklich übel. Wie wär's mit nem Kommentar, in der nächsten Zeile am besten?

    Häh? 🙄



  • finix schrieb:

    Windoof schrieb:

    for(i=1;i<x;i*=2);
    

    Die ist wirklich übel. Wie wär's mit nem Kommentar, in der nächsten Zeile am besten?

    bitte keinen kommentar.



  • net schrieb:

    finix schrieb:

    const unsigned short short_bits = sizeof(unsigned short) * 8;
    

    hätt' ich das geschrieben dann hätte mir jetzt einer erzählt man solle CHAR_BIT statt 8 verwenden 😉

    Ok, dann die hier revidierte Fassung, inklusive <climits> und korrekter Terminologie:

    #include <iostream>
    #include <climits>
    
    int main()
    {
      unsigned short num = 4242;
    
      const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT;
      unsigned short mask = 1 << short_bits-1;
      do {
        std::cout << ((num & mask) != 0);
      } while ((mask >>= 1) != 0);
      std::cout << std::endl;
    }
    


  • volkard schrieb:

    bitte keinen kommentar.

    Zum Code oder zur Erklärung?



  • finix schrieb:

    const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT;

    gibts dafür nicht traits? mach das mal modern.



  • volkard schrieb:

    finix schrieb:

    const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT;

    gibts dafür nicht traits? mach das mal modern.

    Ja, genau, du hast recht.
    Am besten als template realisiert.
    Mit Policy, führende Nullen ausgeben oder nicht.
    Und Spezialfallbehandlung, min & max z.B.
    Diese simple Übungsaufgabe gehört echt verkompliziert. 🙄



  • finix schrieb:

    volkard schrieb:

    finix schrieb:

    const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT;

    gibts dafür nicht traits? mach das mal modern.

    Ja, genau, du hast recht.
    Am besten als template realisiert.
    Mit Policy, führende Nullen ausgeben oder nicht.
    Und Spezialfallbehandlung, min & max z.B.
    Diese simple Übungsaufgabe gehört echt verkompliziert. 🙄

    sorry, aber wer so grottenhäßlichen code schreibt wie du, der muss auch mal auf mich hören. schau, ob die numeric_limits benutzen kannst. und berichte am nesten nachher hier.


Anmelden zum Antworten