Tricki bitowe

bitW tym miejscu postaram się zebrać zbiór użytecznych operacji na bitach. Z biegiem czasu lista będzie aktualizowana. Zachęcam do przesyłania własnych propozycji!

Znane i mniej znane operacje na bitach:

  • Maksymalna wartość integer:
    int maxInt = ~(1 << 31);
    int maxInt = (1 << 31) – 1;
    int maxInt = (1 << -1) – 1;
  • Minimalna wartość integer:
    int minInt = 1 << 31;
    int minInt = 1 << -1;
  • Maksymalna wartość  long:
    long maxLong = ((long)1 << 127) – 1;
  • Mnożenie przez 2:
    n << 1;
  • Dzielenie przez dwa:
    n >> 1;
  • Mnożenie przez m-tą potęgę 2:
    n << m;
  • Dzielenie przez m-tą potęgę 2:
    n >> m;
  • Sprawdzenie parzystości:
    (n & 1) == 1;
  • Zamiana dwóch wartości bez użycia zmiennej pomocniczej:
    a ^= b;
    b ^= a;
    a ^= b;
  • Moduł liczby:
    (n ^ (n >> 31)) – (n >> 31);
  • Największa liczba z dwóch:
    b & ((a-b) >> 31) | a & (~(a-b) >> 31);
  • Najmniejsza liczba z dwóch:
    a & ((a-b) >> 31) | b & (~(a-b) >> 31);
  • Sprawdzenie czy obie liczby posiadają ten sam znak:
    (x ^ y) >= 0;
  • N-ta potęga liczby 2:
    2 << (n-1);
  • Czy liczba jest potęgą 2:
    n > 0 ? (n & (n – 1)) == 0 : false;
  • Średnia:
    (x + y) >> 1;
    ((x ^ y) >> 1) + (x & y);
  • M-ty bit liczby n (licząc od najmniej znaczącego do najbardziej znaczącego):
    (n >> (m-1)) & 1;
  • Ustawienie zera na m-tym bicie liczby n (licząc od najmniej znaczącego do najbardziej znaczącego):
    n & ~(1 << (m-1));
  • Dodanie 1:
    -~n
  • Odjęcie 1:
    ~-n
  • Liczba przeciwna:
    ~n + 1;
    (n ^ -1) + 1;
  • if (x == a) x = b; if (x == b) x = a;
    x = a ^ b ^ x;

 

 

 

 

 

 

 

 

To również może Cię zainteresować:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *