Hej. Skiftningen går ut på att välja ut en bit från numret. Först skiftas hela numret till höger så att biten du vill titta på hamnar i bit 0 (biten längst till höger) sedan and-as resultatet med 1, som har biten längst till höger satt, så att bara den biten plockas ut. Säg till exempel att du matar in 328. Binärt blir det 00101001000. Loopen går från 10 och neråt till noll. Då sker följande:
n = 00101001000
Loopen börjar.
c = 10(decimalt)
[b][u]0[/u][/b]0101001000 n
0000000000[b][u]0[/u][/b] k = n >> c
0000000000[u]1[/u] 1
0000000000[u]0[/u] k & 1
c = 9 (decimalt)
[b]0[u]0[/u][/b]101001000 n
000000000[b]0[u]0[/u][/b] k = n >> c
0000000000[u]1[/u] 1
0000000000[u]0[/u] k & 1
c = 8 (decimalt)
[b]00[u]1[/u][/b]01001000 n
00000000[b]00[u]1[/u][/b] k = n >> c
0000000000[u]1[/u] 1
0000000000[u]1[/u] k & 1
c = 7 (decimalt)
[b]001[u]0[/u][/b]1001000 n
0000000[b]001[u]0[/u][/b] k = n >> c
0000000000[u]1[/u] 1
0000000000[u]0[/u] k & 1
c = 6 (decimalt)
[b]0010[u]1[/u][/b]001000 n
000000[b]0010[u]1[/u][/b] k = n >> c
0000000000[u]1[/u] 1
0000000000[u]1[/u] k & 1
c = 5 (decimalt)
[b]00101[u]0[/u][/b]01000 n
00000[b]00101[u]0[/u][/b] k = n >> c
0000000000[u]1[/u] 1
0000000000[u]0[/u] k & 1
c = 4 (decimalt)
[b]001010[u]0[/u][/b]1000 n
0000[b]001010[u]0[/u][/b] k = n >> c
0000000000[u]1[/u] 1
0000000000[u]0[/u] k & 1
c = 3 (decimalt)
[b]010100[u]1[/u][/b]000 n
00[b]0010100[u]1[/u][/b] k = n >> c
000000000[u]1[/u] 1
000000000[u]1[/u] k & 1
c = 2 (decimalt)
[b]0101001[u]0[/u][/b]00 n
00[b]0101001[u]0[/u][/b] k = n >> c
000000000[u]1[/u] 1
000000000[u]0[/u] k & 1
c = 1 (decimalt)
[b]01010010[u]0[/u][/b]0 n
0[b]01010010[u]0[/u][/b] k = n >> c
000000000[u]1[/u] 1
000000000[u]0[/u] k & 1
c = 0 (decimalt)
[b]010100100[u]0[/u][/b] n
[b]010100100[u]0[/u][/b] k = n >> c
000000000[u]1[/u] 1
000000000[u]0[/u] k & 1
Bara för att vara övertydlig. n >> c flyttar bitarna åt höger. De bitar som skiftas ut kastas bort. På vänstersidan fylls talet på med nollor.
Fetmarkering = de bitar som "överlever" skiftningen, dvs varken skiftas ut eller är nya nollor.
Understruket = den biten som undersöks i den rotationen av loopen.
För övrigt. En något tänkvärt är att högerskiftning i x steg är samma sak som heltalsdivision med 2, x st gånger.
T ex, n>>2 = n/4 (=n/2/2)
och n>>4 = n/16 (=n/2/2/2/2)
(edit)
