Wie wandelt man zahlen (hex,dez,oct) mit bitoperatoren in binär um??



  • Die Zahlen sind doch schon binär, was willst Du da umwandeln?

    int hex = 0x0ABC;
    int oct = 0123;
    int dec = 1234;
    

    Oder willst Du die Zahl in einen String umwandeln?



  • Ausnahmsweise mal fertigen Code.

    void printBin(unsigned int a){
            int i; 
            for(i=CHAR_BIT*sizeof(a)-1;i>=0;--i)  putchar('0'+ !!(a&1<<i));
    }
    

    Aber bitte auch verstehen. Nicht nur copy&paste 😉



  • Was genau bezweckst du mit '!!'?

    MfG SideWinder



  • SideWinder schrieb:

    Was genau bezweckst du mit '!!'?

    Eigentlich wird damit ein "bool" erzwungen, was ja für dieses Beispiel keinen Sinn macht, oder?
    besser wäre:

    putchar( ((a&1<<i) != 0 ? '1' : '0') );
    


  • Jochen Kalmbach schrieb:

    SideWinder schrieb:

    Was genau bezweckst du mit '!!'?

    Eigentlich wird damit ein "bool" erzwungen, was ja für dieses Beispiel keinen Sinn macht, oder?

    Machts halt mal raus und testet dann. Dann merkt ihr es vielleicht.

    putchar( ((a&1<<i) != 0 ? '1' : '0') );
    

    Was soll daran besser sein? Bedingte Sprünge die nicht notwendig sind. Zugegeben bei einer Ausgabe ist Performance nicht wirklich relevant, aber besser find ich das if-else-Dingens trotzdem nicht. Geschmackssache.



  • Du nimmst halt an, dass "bool" 0 oder 1 e gibt. Ich hab gerade keine C++ Referenz da, aber ich glaube dies ist jeder Compiler implementie ung überlassen was er aus "bool" bei einem cast zu einer Zahl macht.
    Und solange ich ir nicht sicher bin, dass dies wirklich überall so ist, kann ich nur jedem davon abraten sowas zu verwenden...
    Aber du kannst gern mal im Standard nachschauen, ob dies so definiert ist, wie Du animmst



  • Ich nehme nicht an. In C ist das so.



  • Da ich den Standard nicht hier habe und den den entsprechenden Absatz nicht zitierst, kann ich es weder bestätigen noch dementieren 😉



  • Jochen Kalmbach schrieb:

    Da ich den Standard nicht hier habe und den den entsprechenden Absatz nicht zitierst, kann ich es weder bestätigen noch dementieren 😉

    Hat dich auch keiner drum gebeten irgendwas zu bestätigen oder zu dementieren 😉

    ISO C :: 6.5.3.3 schrieb:

    The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.

    Sogar für euch C++ler nachgeschlagen:

    ISO C++ :: 5.3.1 schrieb:

    The operand of the logical negation operator ! is implicitly converted to bool (clause 4); its value is true if the converted operand is false and false otherwise. The type of the result is bool.

    ISO C++ :: 4.5 schrieb:

    An rvalue of type bool can be converted to an rvalue of type int, with false becoming zero and true becoming one.

    Sollte reichen, oder?



  • Yuhu!!! Vielen Dank!
    Hab ich auch was dazugelernt!


Anmelden zum Antworten