R0 CREW

Когда рандом не рандомит

ru
#1

⁠Доброго времени суток. Закрался вопрос, на который (в силу хренового знания си) ответить не смог.
Почему вот в таком отрывке кода функция random работает совершенно однозначно, выдавая раз за разом один и тот же результат?

char f1(char a)
{
	char ss = 0xd;
	static int t = 0;
	int b = a1(rand()) % 0xffff;

	b <<= 4;
	b ^= (k[(t++) % ss] >> 4);
	b <<= 4;
	b ^= (k[(t++) % ss]);

	a ^= (char)b;
	return a;
}

int a1(int a) {
	if (a < 0)
		return (-a);
	else
		return a;
}

P.S. выше включен srand(time(0)); так что причина какая-та другая

#2

Потому что (char)b оставляет только младшие 8 битов, в которых нет ничего от rand(). Всё рандомное ушло в старшие разряды двумя командами b<<=4.