[c] zerowanie 8 najmłodszych bitów

FEMO
Użytkownik
Użytkownik
Posty: 348
Rejestracja: 13 lut 2007, o 17:15
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 163 razy

[c] zerowanie 8 najmłodszych bitów

Post autor: FEMO »

Udowodnij , że w języku C wyrażenie: x=x&255;
gdzie x jest liczbą typu int zeruje wszystkie oprócz 8 najmłodszych bitów zmiennej x. Czy wynik zależy od liczby bitów przeznaczonych na reprezentację liczb całkowitych?
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[c] zerowanie 8 najmłodszych bitów

Post autor: soku11 »

\(\displaystyle{ 255_{(10)}=128+64+32+16+8+4+2+1=
2^8+2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=
111111111_{(2)}}\)


Robiac operacje AND z uzyciem takiej maski 8 najmlodszych bitow nie ulega zmianie, bo
\(\displaystyle{ 1&1=1
1&0=0}\)

Czyli gdzie byla 1, tam bedzie 1, a gdzie bylo 0 tam bedzie 0. Natomiast wszystkie pozostale bity po lewej stronie beda traktowane operacja AND z 0, czyli:
\(\displaystyle{ 0&0=0
0&1=0}\)

Czyli beda zamieniane na 0. Od liczby bitow tez nie zalezy (oczywiscie musi ich byc wiecej niz 8).

W razie jakiegos bledu poprawiac Pozdrawiam.
ODPOWIEDZ