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? DankeGruz 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