Uzmimo da je broj koji unosimo velicine 4 bajta i neka je to recimo 2A35CD87.
Binarno je to
00101010001101011100110110000111
Maska je FF, odnosno binarno 11111111. Ovaj broj se posmatra kao 4 bajta, zato sto je dat kao konstanta, a brojne konstante se interpretiraju kao brojevi od 4 bajta (da je tipa char, odnosno velicine 1 bajt, prica bi bila malo drugacija i program ne bi korektno radio). Kad posmatramo ovaj broj kao 4 bajta, to je 000000FF, sto je binarno
00000000000000000000000011111111
Bitwise AND poredi dva bita na istoj poziciji (i to radi za sve 32 pozicije 4-bajtnog broja). Ukoliko su oba bita 1, vrednost je 1, inace je 0.
1. korak iteracije - uneti broj se pomera za 0 mesta u desno i zatim se radi bitwise AND izmedju tog broja i maske
Code:
00101010001101011100110110000111
00000000000000000000000011111111
------------------------------------
00000000000000000000000010000111
Dobijeni rezultat se poklapa sa poslednjim bajtom (poslednjih 8 bitova), jer ove nule u maski rezultuju nulama u resenju.
2. korak iteracije - uneti broj pomera se za 8 mesta u desno, dok se na prvih 8 mesta dodaje 8 nula
Code:
00000000001010100011010111001101
00000000000000000000000011111111
------------------------------------
00000000000000000000000011001101
3. korak iteracije - kao prethodni, samo sto se pomera za 16 pozicija i dodaje se 16 nula
Code:
00000000000000000010101000110101
00000000000000000000000011111111
------------------------------------
00000000000000000000000000110101
4. korak iteracije
Code:
00000000000000000000000000101010
00000000000000000000000011111111
------------------------------------
00000000000000000000000000101010
Sam rezultat ove operacije nije velicine 1 bajt, vec 4 bajta, ali nule u prva tri bajta ne uticu na rezultat, odnosno, isti je broj. Printf ne ispisuje vodece nule kod heksadecimalnih brojeva, kao sto ne ispisuje ni kod decimalnih.
[Ovu poruku je menjao Picsel dana 14.07.2010. u 00:06 GMT+1]
[Ovu poruku je menjao Picsel dana 14.07.2010. u 00:07 GMT+1]