Hallo! Ich bin am Schreiben eines Programmes für die Uni. Bei einem Teil steh ich gerade an: Ich habe eine Dezimalzahl, die ich in vier 8 Bit große Teile spalten und in jeweils eine Variable speichern soll. Nehmen wir an, diese Zahl sei 123456789 was Binär 0000 0111 | 0101 1011 | 1100 1101 | 0001 0101 und Dezimal aufgespalten 7 91 205 21 ergäbe. Wie gehe ich da mit Masken und shifting richtig ran, sodass ich die vier Dezimalen Teile in vier unterschiedliche Variablen speichern kann? Die Eingangs erwähnte Dezimalzahl kann sich natürlich ändern, die ist nicht fix. Ich hab nur sehr einfache Mittel zur verfügung, ich darf keine Arrays o.ä. verwenden. Hat jemand eine Idee, wie ich das lösen könnte? Danke schonmal! LG
>ich darf keine Arrays
Wer sagt das?
Klingt so wie, was mir den Pelz, aber mach mich nicht nass...
double zahl; U8 z1,z2,z3,z4, z1 = zahl & 0xff; z2 = (zahl >> 8) && 0xff; z3 = (zahl >> 8) && 0xff; z3 = (zahl >> 8) && 0xff;
x1 = x & 0xFF; X2 = (x >> 8) & 0xFF; X3 = (x >> 16) & 0xFF; X4 = (x >> 24) & 0xFF;
A. B. schrieb: > double zahl; > U8 z1,z2,z3,z4, > > z1 = zahl & 0xff; Nein. Ganz sicher nicht. Nicht mit double. > z2 = (zahl >> 8) && 0xff; > z3 = (zahl >> 8) && 0xff; > z3 = (zahl >> 8) && 0xff; Und das ist dreimal das gleiche, auch wenn man den Tippfehler in der letzten Zeile korrigiert und z3 durch z4 ersetzt.
Matthias Lipinsky schrieb: >>ich darf keine Arrays > > Wer sagt das? > > Klingt so wie, was mir den Pelz, aber mach mich nicht nass... Die Aufgabenstellung der Übung sagt das ;) Rufus Τ. Firefly schrieb: > A. B. schrieb: >> double zahl; >> U8 z1,z2,z3,z4, >> >> z1 = zahl & 0xff; > > Nein. Ganz sicher nicht. Nicht mit double. > >> z2 = (zahl >> 8) && 0xff; >> z3 = (zahl >> 8) && 0xff; >> z3 = (zahl >> 8) && 0xff; > > Und das ist dreimal das gleiche, auch wenn man den Tippfehler in der > letzten Zeile korrigiert und z3 durch z4 ersetzt. Richtig. Mit double gehts nicht. Dass das 3 Mal das Selbe ist, hab ich auch gleich gesehn. Habs dann gegen 8, 16, 31 getauscht, aber funktioniert leider auch nicht. Rauskommen soll als Ergebnis (bei der Zahl in dem Übungsbeispiel 10.0.32.1 mit eurem Vorschlag jedoch (und dem ersetzten 8,16,31) komme ich auf 0.0.32.1 D.h. mit 31 komme ich nicht aus, da mir eine Stelle am Anfang fehlt, aber 32 geht ja nicht. Was also tun?
:
Bearbeitet durch User
Dominik S. schrieb: > D.h. mit 31 komme ich nicht aus, da mir eine Stelle fehlt, aber 32 geht > ja nicht. Was also tun? siehe oben 24 ist richtig
:
Bearbeitet durch User
Martin H. schrieb: > Dominik S. schrieb: >> D.h. mit 31 komme ich nicht aus, da mir eine Stelle fehlt, aber 32 geht >> ja nicht. Was also tun? > > siehe oben 24 ist richtig Was meinst du mit 24 ist richtig?
Dominik S. schrieb: > Richtig. Mit double gehts nicht. Wenn dan int oder long je nach Architektur oder sowas x4 = *((unsigned char*) &x) + 0; x3 = *((unsigned char*) &x) + 1; x2 = *((unsigned char*) &x) + 2; x1 = *((unsigned char*) &x) + 3;
Dominik S. schrieb: > mit eurem Vorschlag jedoch (und dem ersetzten 8,16,31) komme ich auf > 0.0.32.1 31? 8, 16, 24. Wieso 31?
Rufus Τ. Firefly schrieb: > Dominik S. schrieb: >> mit eurem Vorschlag jedoch (und dem ersetzten 8,16,31) komme ich auf >> 0.0.32.1 > > 31? > > 8, 16, 24. Wieso 31? Ach ja, ich Depp^^ Danke vielmals an alle, jetzt läufts!! :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.