Forum: Mikrocontroller und Digitale Elektronik 1 Byte auf 3 Byte aufteilen


von Thomas (Gast)


Lesenswert?

Hallo,

ich habe mir eine 8-Bit Zufalllsvariable erzeugt. Diese möchte ich nun 
auch zufällig auf 3 Bytes aufteilen.

Ich hätte das nun so getan:

Variable == ?;    //Variable wurde mit einem Zufallswert erzeugt

Byte 1 = Variable / 2;
Byte 2 = Byte1 / 2;
Byte 3 = Byte2 / 2;


Hat jemand noch ne andere Idee?

von Karl H. (kbuchegg)


Lesenswert?

3 Zufallsvariablen erzeugen?
Anstatt der Divisionen irgendwelche andere Operationen nehmen?
Die 3 Variablen durch ausmaskieren von Bits aus der einen Zahl
erzeugen?

Wenn ich noch 30 Sekunden länger nachdenke, fallen mir sicher
noch viele andere Möglichkeiten ein.

Wo liegt den das Problem? Wenn deine Lösung dein Problem
löst, ist es doch gut.

von Thomas (Gast)


Lesenswert?

> Die 3 Variablen durch ausmaskieren von Bits aus der einen Zahl
> erzeugen?

Das würd ich gern machen. Weiß nur nicht wie....;-(

von Thomas (Gast)


Lesenswert?

> Diese möchte ich nun auch zufällig auf 3 Bytes aufteilen.

Wo ist die vorgeschlagene Lösung "zufällig"? Dir ist auch klar, dass die 
Lösung den Wertebereich deiner drei "Zufallszahlen" stark asymmetrisch 
gestaltet. Soll der also ähnlich sein muss man sich zwar Bits aus der 
Quelle maskieren, aber in der Wertigkeit korrigieren.

Nimm drei Zufallszahlen oder erkläre, was eigentlich zu erreichen ist.

von Thomas (Gast)


Lesenswert?

> Das würd ich gern machen. Weiß nur nicht wie....;-(

Also, einzelne Bits maskieren geht einfach durch ver-UND-ung mit einer 
Bitmaske.

Var1 = Master & 0b00000011
Var2 = Master & 0b00001100
Var3 = Master & 0b00110000

Problem ist dann (evtl.), dass Var1 von 0..3 geht, Var2 von 4..12 
(allerdings in 4er Sprüngen). Das kann ja unter Umständen nicht 
gewünscht sein. Also muss die Wertigkeit noch berücksichtigt werden, z. 
B. mit:

Var1 = Master & 0b00000011
Var2 = (Master & 0b00001100) >> 2
Var3 = (Master & 0b00110000) >> 4

Du siehst allerdings auch, dass nur zwei Bit pro Variable übrigbleiben 
(8/3 eben). So besonders tolle Zufallszahlen sind das also 
möglicherweise auch nicht.

Man könnte natürlich hergehen und mehr Bits verwenden, aber dann müsste 
man die doppelt nutzen, was schlussendlich die drei Zufallsgrößen in 
einem gewissen Maße korrelieren würde.

von rene (Gast)


Lesenswert?

Thomas,
Mit ner division hast du oberste Stelle immer null.
wenn Du 3 bytes haben willst solltest du 3 bytes nehmen.

Byte 1 = Random;
Byte 2 = Random;
Byte 3 = Random;

rene

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
Noch kein Account? Hier anmelden.