どのようにして乱数を生成できますか?
乱数を生成するためには0xb4でANDed[AND演算された]バイトのパリティを計算します。 次にそのパリティ・ビットをバイトのLSBにシフトします。
この例では、rand()は乱数を生成しsrand()はシードを設定します。 シードはグローバル変数で、'random_byte'によって定義されます。 これは完璧ではありませんが機能します。 いくつかの変更を加えることでsrand()関数を削除しシード値をパラメータとしてrand()に渡すことができます。
もう1つの考えはタイマーの1つからのカウンタを乱数ジェネレータにシード[設定]することです。 タイマ2は16ビットであるためより理想的な場合があります。従って、その結果生成される数値に表示される繰り返しや パターンが少なくなります。但し、この例では乱数生成用に8ビットのバイトのみを使用していますので フルエフェクトのために16ビットのシードを編集する必要があります。
char random_byte; char rand(void) { char sum; sum = 0; // This calculates parity on the selected bits (mask = 0xb4). if(random_byte & 0x80) sum = 1; if(random_byte & 0x20) sum ^= 1; if(random_byte & 0x10) sum ^= 1; if(random_byte & 0x04) sum ^= 1; random_byte <<= 1; random_byte |= sum; return(random_byte); } void srand(char seed) { random_byte = seed; }