Bitenkénti ÉS operátor C-ben (&)?
Szóval itt van ez a decimálisból binárisba konverter:
int i;
for (i = 2; i >= 0; --i) {
printf("%lu", 5>>i & 1);
}
És ha kivennénk belőle a (& 1)-t akkor kapnánk 125, amit értek, hiszen 5:4,5:2 és 5:1. De a bitenkénti és, hogyan csinál 125-ből 101-t? A & nem csak egyesek és nullások esetén értelmezhető, amikor gyakorlatilag a szorzatukat írja ki?
És ha növelem a & utáni számot miért kapom a köetkezőket: 020, 121,004?
Előre is köszönöm!
Ha valamit összeÉSelsz 1-el akkor gyakorlatilag csak az utolsó bitet tartod meg:
11011101 &
00000001 =
00000001
10101000 &
00000001 =
00000000
Ha valamit 0-val ÉSelz össze akkor az 0, ha valamit 1-el akkor pedig önmaga.
A konverter úgy működik hogy az adott bitet elcsúsztatja úgy, hogy az utolsó bit legyen, majd ÉSsel kiszedi azt az utolsó bitet.
101>>2 = 001
001 &1 = 001
101>>1 = 010
010 &1 = 000
101>>0 = 101
101 &1 = 001
Tehát az 5-re 1,0,1 eredmények jönnek ki.
Nyilván ha nem 1-el ÉS-elsz hanem bináris 10-el akkor az utolsó előtti bitet fogja megtartani, ha pedig bináris 11-el ÉS-elsz akkor az utolsó kettő bitet.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!