Hashowanie wyniku, wyjście poza zakres?

Hashowanie wyniku, wyjście poza zakres?
mistrzuniu1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 51
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?

Kopiuj
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;
}

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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:

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.