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?
[c] zerowanie 8 najmłodszych bitów
-
- 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
\(\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.
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.