Przesunięcie w prawo
Ostatnio zmodyfikowano 2017-04-08 23:39
kaktus12121 Temat założony przez niniejszego użytkownika |
Przesunięcie w prawo » 2017-04-08 22:30:28 Witam Mam zadanie: uzupełnij funkcję int divide(int value, int exponent) aby zwracała wartość przekazaną przez parametr value podzieloną przez dwa do potęgi o wykładniku przekazanym przez parametr exponent. Do operacji dzielenia wykorzystaj operator przesunięcia w prawo >>. Oto mój program: int divide( int value, int exponent ) { int wynik = 1; for( int x = 1; x < exponent; x++ ) { wynik *= 2; } return value >> wynik; }
A oto wyniki kompilacji: PASS divide( 2, 1 ) { return 1; } PASS divide( 4, 2 ) { return 1; } FAILED divide( 2048, 8 ) { return 2048; } FAILED divide( 1024, 3 ) { return 64; } PASS divide( 666, 2 ) { return 166; } PASS divide( 19, 1 ) { return 9; } FAILED divide( 29, 4 ) { return 0; } FAILED divide( 19312367, 6 ) { return 19312367; } PASS divide( 0, 1 ) { return 0; } PASS divide( -5, 2 ) { return -2; } FAILED divide( -1024, 4 ) { return -4; } FAILED divide( -819500, 3 ) { return -51219; }
Pierwszy nawias divide to są dane, a następny nawias to jest to co wyszło po kompilacji. PASS znaczy dobrze, FAILED źle. Program dobrze liczy potęgę, tylko niektóre liczby źle dzielą się poprzez przesunięcie. Nie mam pomysłu. Analizowałem program sprawdzając zawartość zmiennych w każdym etapie i doszedłem do wniosku, że problem leży w przesunięciu |
|
pekfos |
» 2017-04-08 23:39:03 value >> exponent. |
|
« 1 » |