ROL w java

0

Piszę program w SuperWaba/Java ( to taka odmiana javy) mam następujący problem:
funkcja obliczająca CRC dla pewnego protokołu wymaga użycia operacji rotacji bitów w lewo. Heh... i jak tego dokonać ??
Owszczem są operatory << oraz >> ale one odpowiadają za przesów a nie obtót bitów ( bo wchodzą zera ...)

thx za wszelkie info... bo nawet google milczy w tej sprawie

pozdrawiam

0

Nie wiem, czy istnieje ROL, ale zawsze można użyć przesunięć i sumy bitowej.
Napisałem na poczekaniu, ale chyba dobrze:

int a,ile;
a = (a<<ile)|(a>>((sizeof(a)<<3)-ile));

a jeśli nie ma sizeof() to wpisz tam ilość bitów w zmiennej - int pod platformą 32 ma 32 bity - jak masz inne zmienne to odpowiednio

sizeof zwróci ilość bajtów więc (sizeof(a)<<3) zwróci ilość bitów - można zamiast <<3 dać *8 ale tak jest szybciej :)

0

nyo to sobie zrob ROL i ROR ;>

o ile sie nie myle idzie to tak: (pseudo kod w czyms ;p)
unsigned int rol( unsigned int liczba, unsigned int ile )
{
return ( liczba << ile ) | ( liczba >> ( sizeof( unsigned int ) * 8 - ile ) );
}

moglem gdzie sie pomylic, ale powinienes zlapac o co chodzi ;>

(1-8 tyo numery bitow)
siak masz 12345678 i kcesz zrobic rol 3, tyo wychodzi
45678123, czyli
12345678 << 3, tyo wychodzi 45678000
12345678 >> ( 8 - 3 ), wychodzi 00000123
a 45678000 | 00000123 wychodzi 45678123
czyli to o co chodzilo ;>

//argh marooned, 3 sec wczesniej ;pp /gynv
//chyba minuty drogi kolego :) - m.M

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