Bit i system dwójkowy

Podstawową jednostką w informatyce jest jak wiadomo bit. Bit to jedna cyfra w systemie dwójkowym. System dwójkowy z kolei to taki system zapisu liczb gdzie każda cyfra może mieć dwie wartości – zero lub jeden.

Jak w takim razie, używając tylko zer i jedynek, zapisać liczbę 1589? Nie jest to trudne.

Ciekawostką jest, że każda dodatnia liczba całkowita ma swój system chociaż w większość z nich nie jest zbyt praktyczna – nikt nigdy nie słyszał o systemie siódemkowym czy siedemdziesiątkowym. Ważne jest, że wszystkie działają na takiej samej zasadzie.

Zacznijmy od systemu dziesiętnego. Na przykład 198. Spójrzmy na tę liczbę od końca. Każda pozycja ma swój mnożnik.

Pierwsza x 1

Druga x 10

Trzecia x 100

Zgadza się?

Mnożnik jest tak na prawdę potęgą dziesięciu:

Pierwsza = 10^0 = 1

Druga = = 10^1 = 10

Trzecia = 10^2 = 100

I tak dalej…

Mnożnik, mnożymy z zapisana cyfrą, wszystkie pozycje dodajemy i oczywiście skończymy dalej ze.. 198. System dziesiętny jest już tak zakorzeniony w naszych umysłach, że dekodujemy go automatycznie…

System dwójkowy działa bardzo podobnie, tylko, że podstawą potęgi mnożnika jest liczba 2.

Poniższa tabela przedstawia system binarny w pełnej krasie. Pozycja liczona jest od końca – w bajcie 1000 0000 jedynka miałaby pozycję 8. W informatyce, a przede wszystkim w informatyce śledczej, często liczymy od zera raczej niż jedynki, ale w tym wypadku nie będę już bardziej gmatwał. Celem poniższej tabeli jest wyliczenie dziesiętnej wartości dla bajtu 10011001

Pozycja87654321
Potęga2^72^62^52^42^32^22^12^0
Mnożnik1286432168421
Przykładowy bajt10011001
Przykładowa wartość12800168001

Aby uzyskać wartość dziesiętna, należy zsumować wszystkie wartości z wiersza “Przykładowa wartość”:

 128+16+8+1 = 153

Czyli 10011001 to 153 w systemie dziesiętnym.

Dla większych liczb, takich ja na przykład 11000110101, tabelę tę należy po prostu wydłużyć w lewą stronę o tyle pozycji ile jest cyfr w liczbie binarnej. Proponuję spróbowanie własnych sił i przeliczenie tej liczby na system dziesiętny.

Operacje na bitach

Na bitach, czy też ciągach bitów można wykonywać operacje arytmetyczne, takie jak na liczbach dziesiętnych, czyli  dodawania, mnożenie, odejmowanie. Dodatkowo można też wykonywać operacje bitowe: NOT, AND, OR lub XOR. Operacje bitowe przeprowadza się na ciągach bitów o tej samej długości (poza operacją NOT, którą przeprowadza się na jednym ciągu). Różnią się tym od operacji arytmetycznych, że każdy bit (w NOT) i para bitów (OR, XOR, AND) jest obliczana osobno. Łatwiej będzie to wyjaśnić na przykładach.

NOT –  jest negacją. Każdy bit po takiej operacji zmienia wartość na przeciwną z zera na jeden i z jeden na zero. Na przykład:

0101 zmieni się na:

1010

AND – jest odpowiednikiem mnożenia. Dwa bity mnożymy ze sobą:

1 AND 1 = 1

1 AND 0 = 0

0 AND 0 = 0

Przykładowo:

1001 AND

0111

=

0001

Czyli obydwa mnożone bity muszą być jedynką, żeby rezultat był również jedynką

OR – jeżeli przynajmniej jeden z bitów jest jedynką, rezultat będzie jedynką.

1001 OR

1100

=

1101

XOR – rezultat będzie jedynką, tylko jeżeli jeden z bitów jest jedynką:

1010 XOR

1001

=

0011

Zarówno dwa zera jak i dwie jedynki dadzą nam zero.

Operacja bitowa XOR na pierwszy rzut oka nie wydaje się mieć większego praktycznego sensu, jednak to właśnie nią należy koniecznie zapamiętać.

Jest ona stosowana w kryptografii, macierzach RAID oraz metodach weryfikacji poprawności transferu.

Kryptografia symetryczna polega w zasadzie na XOR-owaniu. Algorytmy takie jakie 3DES, AES, Blowfish polegają “jedynie” na wygenerowaniu pseudo-losowego ciągu który użyty jest z kolei do sXOR-owania szyfrowanych plików. Ten sam ciąg XOR będzie później służył do ich rozszyfrowania.

W macierzach RAID XOR jest właśnie tą magiczna technologią, która pozwala na użycie jednego dysku z parzystością dla dowolne liczby dysków z danymi.

Wszystko to dzięki genialnej symetrii operacji XOR, z  którą bliżej zapoznamy się przy opisie macierzy RAID.

Praca z bitami

Mimo, że na co dzień informatyk śledczy zetknie się głównie z systemem szesnastkowym, to od czasu do czasu trzeba będzie interpretować również binarny.

Procesor myśli w dwójkowym, natomiast człowiek daje sobie radę lepiej z szesnastkowym. Na szczęście są to systemy kompatybilne, bez problemu współistniejące.

Jeżeli musimy pracować z liczbami binarnymi, istnieje wiele kalkulatorów online, na przykład ten.

Moim ulubionym, ze względu na to, że jest zawsze pod ręką jest jednak kalkulator Windows. W menu Widok (View), należy wybrać widok programisty. Zobaczymy ku naszemu zdziwieniu, mniej znaną, zaawansowaną stronę kalkulatora.

W kalkulatorze tym możemy wykonywać operacje arytmetyczne na liczbach szesnastkowych, dziesiętnych, ósemkowych i binarnych.Wykonywać operacje binarne takie jak OR, XOR, AND i NOT, a dodatkowo Lsh (left shift), Rsh (right shift), RoL (rotate left), RoR (rotate right).

Liczby mogą być też konwertowane między systemami. Wystarczy wybrać na przykład system dziesiętny, wpisać dowolną liczbę, i przełączyć kalkulator w system binarny, a liczba zostanie przekonwertowana:

WIndowsCalcDecimal

1978 zapisana binarnie:

WindowsCalcBinary

Pamiętać należy, że kalkulator służy do pracy z liczbami. Jeżeli naszym obiektem zainteresowania jest dłuższy ciąg binarny, jak na przykład tekst, kalkulator niewiele pomoże, chyba że tłumaczyć chcemy każdą literę osobno. W takim wypadku potrzebny będzie konwerter tekstu, dostępny między innymi na tej samej stronie.

Ciekawostką jest, że procesor potrafi wykonywać tylko jedną operację arytmetyczną – dodawanie. Wszystkie inne wykonywane są za pomocą dodawania wspomaganego przez operacje binarne – przesunięcia bitów itp.

Dodaj komentarz

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