どのようにして乱数を生成できますか?

乱数を生成するためには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;
}