Dezimalzahl in vier 8 Bit segmente aufteilen - in C

Gast #3374164
Lesenswert?
• ▲
▼
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
#3374201
Lesenswert?
• ▲
▼
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren