Dezimalzahl in Binärzahl umwandeln.
-
Ist es möglich zwischen 4 Bit Blöcke ein Leerzeichen einzubauen?
-
Gandolf schrieb:
Hab ich noch ein Fehler?
Reichen 8 Bit?
Einshort
hat mindestens 16 BitDein Einrückungsstil ist Scheiße.
printf
für einzelne Zeichen ist Overkill. (Aber das kann der Compiler optimieren)Gandolf schrieb:
Ist es möglich zwischen 4 Bit Blöcke ein Leerzeichen einzubauen?
Bei der Ausgabe?
Ja.
Mitzählen.
-
ich hab es zu 16 Bit umgewandelt.
Wie würde die alternative mit printf aussehen?
Die Leerzeichen sollen in der Ausgabe passieren. Ist dies nicht möglich?
-
Gandolf schrieb:
Wie würde die alternative mit printf aussehen?
putchar.
Die Leerzeichen sollen in der Ausgabe passieren. Ist dies nicht möglich?
Bitte ein Minimum an Textverständnis anwenden:
DirkB schrieb:
Gandolf schrieb:
Ist es möglich zwischen 4 Bit Blöcke ein Leerzeichen einzubauen?
Bei der Ausgabe?
Ja.
Mitzählen.Wie liest du daraus, dass es bei der Ausgabe nicht möglich sein solle?
-
Gandolf schrieb:
Wie würde die alternative mit printf aussehen?
int main() { for() //int i von sizeof(zahl) bis 0 herunterzählen { ziffer = //zahl verschoben um i stellen binär verknüpft mit 1 printf("%d", ziffer); } }
übrigens auch deutlich kürzer als dein programm.
Die Leerzeichen sollen in der Ausgabe passieren. Ist dies nicht möglich?
du baust in der for-schleife noch eine if-abfrage ein, die überprüft, ob bereits 4 ziffern geschrieben wurden und dann evtl. ein leerzeichen schreibt.
ps: wenn du dir ein lehrbuch kaufst, das weniger die tollen neuen sprachelemente und mehr die programmierung an sich (sozusagen am beispiel von c) vermittelt, kannst du dir das auch direkt anlesen und brauchst dich nicht so blöde anmachen zu lassen.
-
HansKlaus schrieb:
Gandolf schrieb:
Wie würde die alternative mit printf aussehen?
int main() { for() //int i von sizeof(zahl) bis 0 herunterzählen { ziffer = //zahl verschoben um i stellen binär verknüpft mit 1 printf("%d", ziffer); } }
Alternative heißt etwas Anderes als das Ursprüngliche.
In diesem Fall keinprintf
.HansKlaus schrieb:
übrigens auch deutlich kürzer als dein programm.
Aber auch falsch.
Dennsizeof
liefert einen anderen Wert als du dafür brauchst.HansKlaus schrieb:
Die Leerzeichen sollen in der Ausgabe passieren. Ist dies nicht möglich?
du baust in der for-schleife noch eine if-abfrage ein, die überprüft, ob bereits 4 ziffern geschrieben wurden und dann evtl. ein leerzeichen schreibt.
Das bedeutet "mitzählen"
-
DirkB schrieb:
Alternative heißt etwas Anderes als das Ursprüngliche.
In diesem Fall keinprintf
.hmmm so spät ist es doch noch gar nicht.
Denn
sizeof
liefert einen anderen Wert als du dafür brauchst.stimmt. und jedes mal sizeof aufzurufen ist auch doof, da sich die größe ja nicht so schnell ändern wird. also vorher einmal sizeof und das ergebnis dann multipliziert mit 8 in einer variablen speichern.
es ist dann aber trotzdem noch kürzer.Das bedeutet "mitzählen"
und warum sollte ich dann rumpampen, wenn ich den eindruck habe, dass das wort "mitzählen" doch nicht so klar verständlich ist?
-
sizeof
wird nicht zur Laufzeit berechnet.
Daher ist es egal wie oft du das schreibst.Und wenn du schon
sizeof
nimmst, ist 8 die falsche Wahl. Da nimmt man dannCHAR_BIT
aus <limits.h>
Das ist zwar sehr, sehr häufig 8. Muss es aber nicht.
-
hmmm okay. aber es schadet doch auch nicht, oder?
also dass ein integer unter 16 bit busbreite auch 16 bit, unter 32 bit busbreite eben 32 bit und in fällen, die ich jetzt grad vergessen habe auch 80 bit, dagegen bei 64 bit busbreite trotzdem nur 32 bit belegt, ist mir bekannt, aber dass ein byte etwas anderes als 8 bit sein kann bzw. dass sizeof nicht die anzahl der bytes zurück liefert, ist mir neu. wo tritt so etwas denn auf?
-
Es gibt (eher gab) Maschinen mit 36 Bit Busbreite, wo ein Byte dann 9 Bit hat(te)
Es gibt z.B. DSP (Digitale Signal Prozessoren) deren kleinste adressierbare Einheit 24 Bit groß ist.Das ist dann in C per Definition ein Byte.
sizeof
liefert dafür 1 zurück, CHAR_BIT aber 24.
Da sind dann int, short und char gleichgroß.Exotisch, aber möglich.