Wie kann ich short binär ausgeben?



  • ich glaub das volkard den code von finix scheisse findet, ist ein aprilscherz.



  • .... schrieb:

    ich glaub das volkard den code von finix scheisse findet, ist ein aprilscherz.

    das stimmt.
    aber wenn ich was dagegen hätte, dann

    #include <iostream> 
    #include <climits> //limits
    
    int main() //bracing style anders als unten
    { 
      unsigned short num = 4242; 
    
      const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT; //nutzlos?
      unsigned short mask = 1 << short_bits-1; //direkt berechenbar?
      do { //bracing style anders als oben
        std::cout << ((num & mask) != 0); ///using namespace?
      } while ((mask >>= 1) != 0); //bedingungen sollen nicht verändern
      std::cout << std::endl; //endl meiden, wenn '\n' gemeint ist
    }
    //zu viel blau im code
    

    das führt unmittelbar zu

    #include <iostream> 
    using namespace std;
    
    int main() {
      typedef unsigned short us;
      us num = 4242; 
      us mask = us(~num+num)/us(2)+us(1);
      do {
        cout << char('0'+bool(num & mask));
        mask >>= 1;
      } while (mask);
      cout << '\n';
    }
    


  • Naja, muss ich dir größtenteils zustimmen, aber ging ja darum das Prinzip zu veranschaulichen.
    Frag mich nur was du gegen <climits> und std:: hast.
    Und naja, ushort hätte's vielleicht auch getan 😉

    Nur der Bracing Style ist konsistent, wenn auch hier nicht ersichtlich: lediglich bei Funktions- und Methodenköpfen bekommt die Klammer 'ne eigene Zeile spendiert.



  • naja, da sich die begeisterung für

    us mask = us(~num+num)/us(2)+us(1);
    

    durchaus in grenten hält, mache ich das mal weg.

    warum nicht nach links schieben?

    #include <iostream> 
    using namespace std;
    
    int main() {
      unsigned short num = 4242;
      for ( unsigned short mask=1 ; mask ; mask*=2 ) {
        cout << bool(short(num)<0);
    	num*=2;
      }
      cout << '\n';
    }
    

Anmelden zum Antworten