どのようにして乱数を生成できますか?
乱数を生成するためには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;
}
