viele kleine fragen zu dezimal in binärumwandler
-
ich mache wie der title schon sagt ein dezimalzahl in binärzahlen umwandler. das ganze mit einer for schleife. ich gehe nach folgendem system vor:
Dezimalzahl / 2 | gibt | Rest | ******************************* 439 | 219 | 1 | 219 | 109 | 1 | 109 | 54 | 1 |
usw........
gibt es da ne einfachere methode für.
(fragen zum c folgen gleich. muss aber zuerst die erste frage wissen.)
-
Schau mal ganz unten bei http://www.visual-cplusplus.net/forum/cms_view_article.php?aid=16
-
warum finde ich sowas nie !!!!
thx für den link
-
Du kannst auch die Bitshiftoperatoren nutzen:
int zahl=250, anz=0, erg=0; while (zahl) { if (zahl%10) erg|=1<<anz; anz++; zahl/=10; }
das wäre dann nicht rekursiv, ist einer rekursiven lösung eigentlich vorzuziehen. Das System ist übrigens aber immer das gleiche, sowohl bei meiner als auch bei der vorhin genannten rekursiven wird immer der Rest betrachtet..
Mata
-
void i2b(int i){if(i>>1)i2b(i>>1);printf("%d",i&1);}
52 zeichen
wo ist interpreter?
-
c.rackwitz schrieb:
void i2b(int i){if(i>>1)i2b(i>>1);printf("%d",i&1);}
52 zeichen
wo ist interpreter?Der muss erstmal seinen Rausch ausschlafen
-
Aber das schaff ich sogar noch im Rausch:
void i2b(int i){i>>1?i2b(i>>1):i;printf("%i",i&1);}
51 Zeichen
Wo bleibt Windalf?
-
davon abgesehen...
g++ schrieb:
blank.cpp: In function
void i2b(int)': blank.cpp:3: \
i2b(int)((i >> 1))' has type `void' and is not a throw-expressionint i2b(int i){i>>1?i2b(i>>1):i;printf("%i",i&1);}
*scnr* 50 byte
-
[quote="c.rackwitz"]davon abgesehen...
g++ schrieb:
blank.cpp: In function
void i2b(int)': blank.cpp:3: \
i2b(int)((i >> 1))' has type `void' and is not a throw-expressionWillst du mir was sagen? Meine Funktion lässt sich ohne Warnings kompilieren...
int i2b(int i){i>>1?i2b(i>>1):i;printf("%i",i&1);}
*scnr* 50 byte
... was man von deiner Funktion nicht sagen kann
-
wenn du das ernst gemeint hast:
interpreter schrieb:
void i2b(int i){i>>1?i2b(i>>1):i;printf("%i",i&1);}
i2b gibt nichts zurück, was aber der ?: operator so gerne hätte...
wenn du das mit einem
gemeint hast:
-
void i2b(int i){i/2?i2b(i/2):i;printf("%i",i&1);}
-
omg, ich fass mir an den kopf
-
c.rackwitz schrieb:
wenn du das ernst gemeint hast:
interpreter schrieb:
void i2b(int i){i>>1?i2b(i>>1):i;printf("%i",i&1);}
i2b gibt nichts zurück, was aber der ?: operator so gerne hätte...
wenn du das mit einem
gemeint hast:
Bei mir lässt sich das ohne Probleme kompilieren
-
anyway... int i2b ist kürzer als void i2b
-
wenn int i2b muss sie auch was zurückgeben. dadurch wird sie ja wohl doch was länger.. return hat schonmal 6 buchstaben
-
@meta
ich vermute mal dafür hat der alte standard auch wieder eine schweinerei vorgesehen das dann im falle ein defaultwert zurückgegeben wird... auch kann man int gleich weglassen da dies dann defaultmässig angenommen wird...
-
als mein compiler (microsoft visual studio 6) gibt n error...
gruß,
mAta
-
als mein compiler (microsoft visual studio 6) gibt n error...
das ist natürlich auch der vorbildlichste unter den Standardanbeterkompilern...
-
ich hab den gcc in mingw und es kommen fehler bei "void i2b", jedoch nur warnungen bei "int i2b".
warnung wegen dem fehlenden return (wird anscheinend durch nen default wert ausgeglichen).
fehler, weil der ?: operator sonst einen rückgabewert von einer void funktion erwartet...logisch, ne?
edit: sorry, hab es die ganze zeit als c++ compilieren lassen. wenn ich es als c compilieren lasse, dann meckert g++ nicht mehr wegen dem ?:...