binäre zahlen



  • Peinlich dass ich hier so etwas fragen muss.

    Ich weiß dass ich in einem normalen Compiler "0x" benutzen kann um dem Compiler zu sagen es handelt sich bei z.B. 0x0000FF00 um einen hexadezimalen Wert. Wie teile ich dem Compiler mit das ich eine binäre zahl benutzen möchte. "0b" erkennt er nicht.

    Ich benutze VisualStudio 2010 auf Windows XP sp2/3.



  • Kennt der Compiler nicht. Im Kopf in Hex umrechnen und als Hex schreiben.

    Manche Compiler für Mikrokontroller können das.

    Beim einlesen oder umwandeln eines Strings kann man bei strtol() als 3. Argument die Zahlenbasis angeben.



  • Nicht mit Standardmitteln möglich, aber mit einer Hilfsfunktion und Übergabe des Binärwertes als String, z.B.

    int fromBin(const char *b)
    {
      int r=0;
      while(*b)
        r<<=1,r|=*b++-48;
      return r;
    }
    


  • Wutz schrieb:

    r<<=1,r|=*b++-48;

    kannst du nicht einmal deinen code sauber formatieren? oder denkst du so ein - auch noch falsches - gemurkse bringt dir plus punkte?



  • meh, ich hab etwas rum gedacht und dachte mir dann ich mache es mit inline asm.

    int i = false;
    
    __asm{ mov i, 11110000b };
    

    vielleicht sogar als macro?

    #define BIN(x,y) __asm{ mov x, y };
    


  • Weit jenseits von Kompatibilität und Standard.

    Dann schreib lieber 0xF0. Versteht auch jedr Programmierer.

    Oder mach dir Makros oder enums. Für 8Bit ist das kein Problem (eine kleine Fleißarbeit).

    #define b00000000 0x00
    #define b00000001 0x01
    #define b00000010 0x02
    ...


  • Mod

    Compilier dein Programm mit einem C++-Compiler und bastel (oder such im Netz danach) ein paar schicke Templates die zur Compilezeit die Konstanten umrechnen.



  • man muß sich doch eh "nur" die hexzahlen für die ersten 4 bit merken... das sollt doch machbar sein?



  • Es gibt glaube ich nur wenige Anwendungsmöglichkeiten, wo einem Binärliterale echt weiterhelfen. Die meisten Leute, die ständig mit Bits rumfrickeln, sehen durch Hexadezimalnotation "hindurch" die Binärdarstellung, denen bringt das eigentlich nichts. Was nicht heißt, dass es nicht schön wäre, sie zu haben, aber ein Killerfeature wäre es nicht gerade.



  • sicher das es in Visual Studio nicht geht?

    Imho kann man dort auch %b für printf nutzen, was auch nicht im Standard enthalten ist (bzw. das eigtl. untersagt, weil die anderen Kleinbuchstaben reserviert sein sollten)

    Du kannst auch noch Oktal (8er System) statt Hexadezimal nutzen.
    Man schreibt dann kein 0x sondern einfach nur 0 davor 🙂



  • Eine Alternative mit Makros. Die flexibler ist, als alle Werte einzeln vorzuhalten und IMHO sich auch besser lesen und schreiben lässt.

    http://codepad.org/ED7Dphvf


Anmelden zum Antworten