Umwandlung von Dezimalen Zahlen in Binär-Code (ANSI C)



  • Hi,

    Habe ein kleines Problem mit der formatierten Ausgabe von Zahlen.
    Ich möchte div. Zahlen als Binär-Code (1001011 usw.) ausgeben. In einem Buch habe ich gelesen, dass man nur anstelle %d einfach %b schreiben kann, und dann erfolgt die ausgabe im binär-code. Leider hat das nicht funktioniert. Könnt ihr mir da weiterhelfen? Danke

    Gruz BBB



  • BIGBADBEAR schrieb:

    In einem Buch habe ich gelesen, dass man nur anstelle %d einfach %b schreiben kann, und dann erfolgt die ausgabe im binär-code.

    ein %b kennen die meisten 'printfs' leider nicht. musst du es selber coden mit shifts und bit tests. hier gibt's im board aber auch massig threads und lösungen zu dem thema...

    btw: heisst das buch etwa 'c von a bis z'?



  • Ein Format %b (für Binär) gibt es im Standard wirklich nicht. Das mußt du schon von Hand umwandeln (siehe auch Wikipedia)

    (unter C++ würde ich jetzt bitset's vorschlagen)



  • CStoll schrieb:

    (unter C++ würde ich jetzt bitset's vorschlagen)

    unter java würde ich jetzt Integer.toBinaryString() vorschlagen.
    ...aber ob ihm das helfen würde 😕



  • int main() { 
    
       int var = 77777;
       for (int i = 0; i < 32; i++)
       {
            if (var & 0x80000000)
                    printf("1");
            else
                    printf("0");
    
            var <<= 1;
        } 
       printf("\n");
       return 0; 
    }
    

    🙂



  • int main() {
    	int zahl = 34562, i;
    	for(i = 31; i >= 0; i--)
    		printf("%1d", (zahl>>i) & 1);
    	return 0;
    }
    

    😃



  • int main() {
        int zahl = 12345;
        unsigned mask =~(~0U>>1);
        while(mask){
        	putchar("10"[!(mask&(unsigned)zahl)]);
        	mask >>= 1;
    	}
        return 0;
    }
    

    🤡



  • Oh, ein Wettrennen! 😃



  • timmix schrieb:

    Oh, ein Wettrennen! 😃

    ja fein... 😉
    hier ist mein beitrag:

    void print_binary (unsigned long v)
    {
       unsigned long z;
       if (z = v>>1)
          print_binary (z);
       putchar ('0' + v-(z<<1));
    }
    

    soll der op mal sagen was er am schicksten findet 🙂



  • net schrieb:

    hier ist mein beitrag:

    Ich wusste ja, dass du noch mit deiner rekursiven Methode ankommst. Wollte sie dir eigentlich schon wegschnappen 😉



  • TactX schrieb:

    net schrieb:

    hier ist mein beitrag:

    Ich wusste ja, dass du noch mit deiner rekursiven Methode ankommst. Wollte sie dir eigentlich schon wegschnappen 😉

    naja, ich hab' sie ja schon mindestens 20 mal gepostet hier 😉
    übrigens, das tollste an der rekursiven methode ist, dass man kein ULONG_MAX o.ä. braucht und dass die bits automatisch von links nach rechts ausgegeben werden.



  • Unterscheidet sich zwar wenig, aber hier aus meiner Codesammlung:

    void bin(unsigned b) {
        unsigned mask = 1 << (sizeof(unsigned) * 8 - 1);
        do 
            putchar(mask & b ? '1' : '0');
        while(mask >>= 1);
    }
    


  • hier noch was ganz haarsträubendes 😉

    void print_binary (unsigned long v)
    {
       char a[64], *p;
       for (p=a+sizeof(a)-2,memset(a,'0',p-a+1),p[1]=0; v; *p-- += (v&1), v>>=1);
       printf ("%s\n", p+1);
    }
    


  • net schrieb:

    übrigens, das tollste an der rekursiven methode ist, dass man kein ULONG_MAX o.ä. braucht und dass die bits automatisch von links nach rechts ausgegeben werden.

    Sehe zwar nicht den Vorteil daran, aber 👍 😉



  • TactX schrieb:

    int main() {
        int zahl = 12345;
        unsigned mask =~(~0U>>1);
        while(mask){
        	putchar("10"[!(mask&(unsigned)zahl)]);
        	mask >>= 1;
    	}
        return 0;
    }
    

    🤡

    Hey, gut 👍


Anmelden zum Antworten