Jump to content

Archived

This topic is now archived and is closed to further replies.

zizou666

Rozwiązany: Operacje na bitach

Recommended Posts

Mam problem z pewna funkcja w moim programie, ktora ma za zadanie przesunac pewna liczbe o n bitow w zapisie binarnym, tak aby bity tracone przeszly na poczatek, i zwrocic jej wartosc. Wiem jak to zrealizowac, ale mam problem z zalozeniem maski. Otoz, podaje liczbe, przesuwam ja o n bitow w prawo. Czesc bitow jest tracona. Teraz przesuwam te sama liczbe w druga strone o 32 - n bitow (liczba jest w formacie 32 bitowym). Trace wtedy ta druga czesc. Wywoluje wtedy funkcje printbit z mojego programu i zamieniam obie liczby na postac binarna. Nie mam pojecia jednak jak zalozyc maske, czyli zamieniona druga liczbe zalozyc na pierwsza, zeby calosc byla odpowiednio przesunieta. Mam nadzieje, ze mozna zrozumiec ;)

Oto frament kodu:

unsigned int rightrot(unsigned int liczba, int n)
{
         unsigned int temp,temp2;
         temp = liczba<<32-n;
         temp2 = liczba>>n;
         printbit(temp);
         printbit(temp2);

         }

Nie mowcie, ze ta funkcja nie zadziala i takie tam, bo dobrze o tym wiem ;) Chodzi mi tylko jakby o zlozenie bitowe 2 zmiennych: temp i temp2 (dodam, ze alternatywa logiczna sie nie nadaje, gdyz po przesunieciu 32-n bitow w lewo po stronie prawej zostaje mi czesc bitow).

Link to comment
Share on other sites

Ciężko Cię zrozumieć, po trzecim czytaniu dopiero wyszło mi coś takiego:

Dla ułatwienia zapisuję szesnastkowo:

Mam: 12345678

W prawo o 2: 00123456

W lewo o 8 - 2: 78000000

Teraz robimy operację or, ale nie logiczną a binarną:

00123456

78000000 |

------------------

78123456

Procesory x86 mają instrukcje do tego celu, tj. ror i rol, zajrzyj tu i tu

Link to comment
Share on other sites

No wiem przepraszam ;) Ale problem juz rozwiazany, maske zakladalem dobrze, ale mialem problem z funkcja zamieniajaca liczbe na postac binarna, gdyz zrobilem ja na tablicach. Po zamianie i zrobieniu tej funkcji na przesuneciach bitowych podczas wywolania jej w tej funkcji odpowiedzialnej za przesuwanie juz wszystko jest w porzadku. Temat do zamkniecia.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...