Ktoś podpowie co jest nie tak?

0

To jest algorytm dzielenia przez 2, elementy dst reprezentują cyfry liczby, wydaje mi się, że jest jakiś błąd z przeniesieniem.
Próbowałem tutaj wykorzystać fakt ze >>1 to dzielenie przez 2, a moje cyfry sa 31 bitowe. Te <<30 to taki skrot, zamiast najpierw przesuniecia o <<31 i potem >>1, wykorzystuje tutaj wieksza precyzje, ale jednak cos robie zle, ktos podpowie?

long c=0, t=0;

    for(int i=len-1; i>=0; i--){
        c+=(long)(dst[i])<<30;
        t=c>>31;
        dst[i]=(int)t;
        c&=0x7FFFFFFF;
    }
0

Co Wy macie w klasie jakieś takie zadanie? bo gdzieś tutaj widziałem normalnie identyczny problem, tylko typ pytał jak warunek usunąć czy cos....

Nie napisałeś dlaczego zdaje Ci się, że nie działa.
Pytanie jeszcze czy to ma być dzielenie arytmetyczne czy logiczne (logicznene nie zachowuje znaku operacji)
Ja bym to zrobił tak (dzielenie jak w mikrokontrolerze)

c=liczba_do_dzielenia&0x10000000; // zapisuje bit znaku
liczba_do_dzielenia=!c & liczba_do_dzielenia // usuwam znak aby nie mial wplywu na przesunięcie
wynik=liczba_do_dzielenia >> 1; // dziele przez 2
wynik=wynik | c; // dokładam znak

to by mi podzieliło całkowicie na 2 ze znakiem a wiec arytmetycznie stałoprzecinkowo

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