C/Powszechne praktyki: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
GDR! (dyskusja | edycje)
GDR! (dyskusja | edycje)
Linia 112:
}
 
Jeśli nie władasz biegle kodem binarnym, tworzenie masek bitowych ułatwią ci przesunięcia bitowe. Aby uzyskać liczbę która ma zapalony bit o numerze <code>n</code> (bity są liczone od zera), przesuwamy bitowo w lewo jedynkę o <code>n</code> pozycji:
Zauważ, że nie musimy tutaj przesuwać bitów - nasz bit znajduje się od razu na ostatniej pozycji.
 
1 << n
 
Jeśli chcemy uzyskać liczbę, w której zapalone są bity na pozycjach <code>l, m, n</code> - używamy sumy logicznej ("lub"):
 
(1 << l) | (1 << m) | (1 << n)
 
Jeśli z kolei chcemy uzyskać liczbę gdzie zapalone są wszystkie bity poza <code>n</code>, odwracamy ją za pomocą operatora logicznej negacji <code>~</code>
 
~(1 << n)
 
Warto władać biegle operacjami na bitach, ale początkujący mogą (po uprzednim przeanalizowaniu) zdefiniować następujące makra i ich używać:
 
/* Sprawdzenie czy w liczbie k jest zapalony bit n */
#define IS_BIT_SET(k, n) ((k) & (1 << (n)))
 
/* Zapalenie bitu n w zmiennej k */
#define SET_BIT(k, n) (k |= (1 << (n)))
 
/* Zgaszenie bitu n w zmiennej k */
#define RESET_BIT(k, n) (k &= ~(1 << (n)))
 
 
 
[[en:Programming:C_common_practices]]