mikrocontroller.net

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


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die 3 Variablen durch ausmaskieren von Bits aus der einen Zahl
> erzeugen?

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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.