Hashowanie wyniku, wyjście poza zakres?

0

Piszę funkcję w której sortuje i hashuje wynik, żeby szybciej móc przeszukiwać tablice, problem być może trywialny, ale nie wiem dlaczego dla danych np 10 20 30 50 40
zwraca mi wynik zły, a dla danych 1 2 3 4 5 wszystko jest w porządku. Jakbym gdzieś wychodził poza zakres. Według debuggera sortowanie zachodzi poprawnie. Może wynik w jakiś nieznany dla mnie sposób nie jawnie się rzutuje?

unsigned long  long int SortujHashuj(int tmp[5])
{
	for (int i = 1; i < 5; i++)
	{
		int j = i;
		while (j > 0 && j<5)
		{
			if (tmp[j] < tmp[j - 1])
				swap(tmp[j],tmp[j - 1]);
			j--;
		}
	}
	long long int wynik = tmp[0] + tmp[1] * 100 + tmp[2] * 10000 + tmp[3] * 1000000 + tmp[4] * 100000000;
	return wynik;
}

1

Dla 32-bitowych intów 50 * 100000000 faktycznie wychodzi poza zakres dostępnych wartości i masz tu UB. Prawdopodobnie dostatecznym fixem będzie u ciebie użycie literałów większego typu, czyli:

long long int wynik = tmp[0] + tmp[1] * 100LL + tmp[2] * 10000LL + tmp[3] * 1000000LL + tmp[4] * 100000000LL;

1 użytkowników online, w tym zalogowanych: 0, gości: 1