Uzyskanie czesci jednosci a przesuniecia bitowe.

Odpowiedz Nowy wątek
2014-12-17 11:08
0

Witam,
Zaczne od tego, ze watek ten umiescilem tutaj bo wydaje mi sie bardziej odpowiedni niz Newbie.
Sprawa wyglada tak, ze mam takie zadnako zeby z liczby wyciagnac czesc jednosci np. z 32 osiagnac 2.
Mozna to uzyskac poprzez reszte z dzielenia przez 10, ale to wydaje mi sie zbyt trywialne. :)
Zastanawiam sie, czy operujac na bitach daloby sie cos takiego zrobic ?
Moim pomyslem bylo uzycie maski 11110000 (ostatnie 8 bitow) zeby wyciagnac 4 bity w ktorych sa przechowywane liczby od 0 - 15. Niestety nie jest to takie proste jak myslalem bo problem sprawia np. liczba 270 tj. 10000 1110 po uzyciu mojej maski otrzymuje 0000 1110 co jest liczba 14. Wiec niestety moja maska jest zla, albo operacje jakie wykonuje.
Ma ktos moze pomysl jak to rozwiazac, albo moze ta reszta z dzialenie jest na tyle szybka, ze moze nie wart tracic czasu na inne rozwiazania ?

Pozostało 580 znaków

2014-12-17 11:17
2

Reszta z dzielenia jest tak samo wolna jak i samo dzielenie.
Reszty z dzielenia poprzez coś innego niż potęga dwójki nie uzyskasz za pomocą operacji bitowych, ale mnożenie już tak, np x*10 = (x<<3)|(x<<1) z resztą z tej formuły widać że nie da się osiągnąć tego co chcesz.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-17 11:21
0

Ja to bym zrobił tak, zamienił liczbę int (bo rozumiem, że liczba jest zawsze całkowita) na std::string, następnie do nowej zmiennej zapisał tylko ostatni znak (liczbę) a następnie zamienił tego stringa na wartość liczbą (int). Piszę odnośnie C++.

edytowany 1x, ostatnio: maniek1310, 2014-12-17 11:22
Wolniej się już chyba nie da. - ŁF 2014-12-17 12:47
@ŁF, da się: - najpierw wysyłamy do bazy danych przez skrypt PHP ... ;P - _13th_Dragon 2014-12-17 12:50

Pozostało 580 znaków

2014-12-17 12:29
0

Moim zdaniem już sama zamiana liczby na napis wymaga wykonania wielu dzieleń i modulo.

Jeżeli szukasz najszybszego sposobu, to wydaje się, że najlepiej już pozostać przy dzieleniu i modulo.

Pozostało 580 znaków

2015-01-01 23:14
Złoty Pomidor
0

Da się zrealizować dzielenie/resztę z dzielenia za pomocą dwóch przesunięć bitowych, mnożenia i dodawania. Kiedyś to było o wiele szybsze od dzielenia, na nowych procesorach już nie jest. W zależności od flag optymalizacyjnych każdy kompilator potrafi to wygenerować.

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