Zufallszahlen-Generator mit Schieberegister implementieren



  • Hallo,
    ich hab ein Problem damit mir das Prinzip vorzustellen, wie eine Zufallszahl mit einem Schieberegister und einer XOR-Verknüpfung generiert wird.
    Folgende Klassen sind gegeben:

    class: Random
    Random()
    Random(long seed)
    int next(int bits)

    class: XOR
    bool xor(bool i1, bool i2)

    class: Register
    void shiftLeft(int lsb)
    int getBitAt(int position)
    getRegisterContent()

    Wie müsste der Algorithmus in der next()-Methode (Klasse Random) ungefähr aussehen, um die Zahl zu generieren und wie arbeiten XOR und Register dabei zusammen?





  • Hm ja danke schonmal.
    Wenn ichs richtig verstanden habe, dann gibt der User eine Zahl an den Generator, dieser wird in Bits dargestellt, welche der Grundstein für das Schieberegister und die Random-Zahl ist.
    Dort werden an zwei Positionen je ein Bit gewählt, an die xor-Methode gereicht und es wird dementsprechen eine 0 oder 1 zurück gegeben und an die erste Stelle des Registers geschoben. Die letzte Stelle fliegt dafür raus. Dies wird n mal durchgeführt und die Zahl ist mehr oder weniger zufällig.

    Wie greift man am Besten auf den Integer zu, um die einzelnen Bits zu manipulieren, zu schieben usw?



  • In Java gaebs die Klasse "Bitset". In C++ gaebs ebenfalls die std::bitset, und sonst halt mit lowlevel Shift- und Bit-operatoren 🙂


Anmelden zum Antworten