Wszystkie dane są przechowywane w komputerze w postaci ciągu bitów. Dzięki porównaniu różnicy ich bitów można łatwo stwierdzić czy dane są identyczne, albo czym się różnią. Najwygodniejszym sposobem wybierania i porównywania bitów jest zastosowanie operacji binarnych. Opis wybranych operacji logicznych można znaleźć artykule o matrycach logicznych.
Przedstawione w artykule zadanie polega na wyznaczeniu ilości różnych bitów między dwoma liczbami całkowitymi.
Jednym z najprostszych sposobów dzieki którem można zrealizować zadanie jest wybieranie kolejnych bitów z liczby. W tym celu użyjemy operacji AND.
(1.) Funkcja przyjmuje dwie liczby całkowite i (2.) deklaruje licznik, który będzie zliczał ile jest różnych bitów. W dalszej częśći (3.) deklarowana jest pętla, która będzie przechodzić po kolejnych bitach liczb. (4.) Jeśli wybrane bity są różne to (5.) należy zwiększyć licznik. Na koniec (8.) pozostaje zwrócić wynik liczby.
Poprzednie rozwiązanie jest bardzo proste i intuicyjne. Jednak do tego zadania można zastosować również operację XOR. Jest to operacja, która ma następującą matrycę logiczną:
p | q | p XOR q |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
Jak można zauważyć tylko dla różnych wartości zostanie zwrócona prawda, a w pozostałych przypadkach fałsz. Oznacza to, że można zamiast operatora nierówna się zastosować XOR, albo zastosować tę operację na obydwu liczbach równocześnie i policzyć ilość bitów 1 w rezultacie tej operacji.
Rozwiązanie drugim sposobem realizuje poniższy algorytm:
(2.) Wykonaj operację XOR, a potem (3.) zadeklaruj licznik. (4. - 8.) Tym razem wystarczy wybierać bity tylko z jednej liczby. Można tego dokonać przy pomocy podobnej pętli co w poprzednim przykładzie.
W celu przetestowanie funkcji można zastosować poniższą funkcję main():
Napisz algorytm, który sprawdzi ile jest identycznych bitów, a potem na podstawie tej wartości wyliczy ile jest różnych bitów. Zmień również sposób obliczania wartości zmiennej wybierz. Pamiętaj, że w zależności od typu zmiennej liczba bitów może się różnić!