Hashowanie wyniku, wyjście poza zakres?

Odpowiedz Nowy wątek
2017-03-24 11:40
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;
}

Pozostało 580 znaków

2017-03-24 11:43
kq

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;

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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