Wie kann ich short binär ausgeben?



  • 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.



  • finix schrieb:

    volkard schrieb:

    bitte keinen kommentar.

    Zum Code oder zur Erklärung?

    den code nicht kommentieren.
    sondern anders schreiben.

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

    oder

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

    oder

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

    oder irgendwie halt, daß man das da sauber lesen kann. aber schmutzigen conde nicht kommentieren, statt zu reinigen.



  • volkard schrieb:

    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.

    Oh, jetzt schreibe ich auch noch grottenhäßlichen Code oder was? Und hab noch nie was von numeric_limits gehört? Und das alles nur weil's dir nicht gefällt?

    Irgendwie ging's doch eigentlich nur um eine Lösungsstrategie an sich für eine Anfängeraufgabe, oder? Mag sein dass du in diesem Fall recht hast und numeric_limits<unsigned short>::digits auch für Newbies selbsterklärend genug ist, oder es wenigstens sinnvoll genug wäre es schnell zu erklären.

    volkard schrieb:

    den code nicht kommentieren.
    sondern anders schreiben.

    Ok, hätte ich vielleicht etwas ausführlicher kommentieren sollen. Hier meine Variante:

    for (i=1;i<x;i*=2)
      ; // do nothing
    
    // oder speziell für diesen Fall:
    int i = 1;
    while (i<x) {
      i *= 2;
    }
    

    volkard schrieb:

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

    Naja, wenn's denn sein muss.

    volkard schrieb:

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

    Macht, finde ich zumindest, immer noch nicht unmittelbar deutlich was los ist.

    volkard schrieb:

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

    Heute ist der 1.April, was?

    Leere Methoden nicht zu kommentieren mag ja fast noch OK sein, aber leere Schleifenkörper müssen einfach kommentiert werden.
    IMAO.



  • Wozu soll das gut sein? Man sieht doch, dass die Schleife leer ist. Bei doNothing(); würde ich eher noch nach der Definition suchen, um sicher zu gehen. 😉



  • volkard schrieb:

    den code nicht kommentieren.
    sondern anders schreiben.

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

    oder

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

    oder

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

    bringt alles nix. es sieht immer so aus als ob du eine art 'delay' machen würdest. gerade die letzte variante ist besonders irreführend. nur ein schicker kommentar hilft hier weiter...

    for(i=1;i<x;i*=2); /* bits zählen (oder was immer das machen soll) */
    


  • Oh gott... seid ihr peinlich... wollt ihr mich alleaufden Arm nehmen? - Achja..., richtig... heut ist der 1.4. April April!

    Jungs, es ist dochsowas von scheißegal, wie man diese leere Schleife darstellt, genau genommen ist sie ja nicht leer, nur der Schleifenkopf bildet hier schon den Schleifenkörper dar, deshalb das Semikolon gleich dahinter. Ein Programmierer, der das nicht sofort erkennt, hat meiner Meinung nach auch kein Kommentar verdient. Leute, diese Schleife

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

    ist doch wohl eindeutig, oder...? Und die Darstellung ist Geschmackssache. wenn ihr das nicht so lassen wollt, schreibt doch meinetwegen 3000 Zeilen Kommentare drunter, ist mir sowas von latte, aber macht diese Zeile deshalb bitte nicht gleich schlecht, nur weil sie nicht 100%ig so aussieht, wie ihr es machen würdet.



  • Windoof schrieb:

    Jungs, es ist dochsowas von scheißegal, wie man diese leere Schleife darstellt

    ... welch Weisheit aus deiner erschöpfenden Erfahrung im Umgang mit grösseren Softwareprojekten.... verschone uns doch bitte damit ja?



  • Ach junix, wie habe ich doch auf dein Kommentar nur gewartet, welch sinnloser Versuch mich wiedermal zu erniedrigen. Sage mir doch, oh heiliger Moderator, mit unendlich großer Erfahrung: Welchen Unterscheid macht es, wenn ich das Semikolon _unter_ der Schleife positioniere? - Richtig: Keinen. Und verschone du mich bitte in Zukunft - wie ich jetzt schon zum 13. Mal wiederhole - mit deinen Sprüchen... und bitte: Tu nicht wieder so als würdest du für alle sprechen, denn das tust du garantiert nicht.



  • Windoof schrieb:

    Welchen Unterscheid macht es, wenn ich das Semikolon _unter_ der Schleife positioniere? - Richtig: Keinen.

    Funktional nicht. Optisch - und die Erfassungsmethode des Hirns in diesem Fall ist nunmal optisch - einen erheblichen. Ein Semikolon am Ende einer Zeile ist einfacher zu übersehen als eines direkt unterhalb -> Die Erfassung des Quelltextes geht schneller und fehlerfreier.

    Die restliche Polemik kannst du dir schenken. Deine Klägelichen versuche meinen Stil zu immitieren wirken lediglich lächerlich. Speziell dann wenn es in einem billigen Austausch von wörtern in der zuvor gegen dich verwendeten Konstruktion gipfelt.


Anmelden zum Antworten