O bitach i liczbach binarnych ogółem
22.03.2013 12:55
Witajcie. Wpis może wprawdzie nie jest zbyt lubiany ze względu na swój temat i jego dziedzinę (jakby nie patrzeć jest nią matematyka). Ale od królowej nauk nie uciekniemy :) W dzisiejszym wpisie chciałbym poruszyć temat liczb binarnych - tutaj dość ogólnie, jednak w planach są również dalsze wpisy. Tekst powstał dla znajomego, który poprosił mnie o lekkie wytłumaczenie o co z tym chodzi. No więc może nie będzie to super naukowe wytłumaczenie, ale postaram się opisać to dość łopatologicznie i zrozumiale. No to lecimy :P
Ale dlaczego 0 i 1?
To jest wbrew pozorom bardzo ciekawe pytanie. Przecież na co dzień jesteśmy przyzwyczajeni to systemu dziesiętnego. Dlaczego więc komputer, skoro jest taki mądry (a może jednak nie?) działa na systemie binarnym? Jest to na pozór bardzo proste. Można wręcz rzec, że zostało to “zapożyczone” z natury i przyrody. Ale zróbmy mały eksperyment. Niech “0” oznacza brak prądu, a 1”1” jest przepływ. Podejdźmy do włącznika światła w pokoju. Zależnie od tego jaka jest pora dnia czytania przez Ciebie wpisu masz włączone (stan “1”) lub wyłączone (odpowiednio stan “0”) światło. Załóżmy, że jest dzień i masz wyłączone światło. Co się stanie, jak krótko mówiąc “pstrykniesz” włącznik? Światło zapali się, gdyż dostarczysz mu prąd. Innymi słowy zmienisz stan światła z “0” na “1”. Choćbyś tysiąc razy przełączał włącznik i tak do wyboru masz tylko te dwa stany. Nie włączysz światła w “połowie” (nie mówię, o rozdzielaniu kontaktu na poszczególne żarówki :P). Spróbuj teraz wyobrazić sobie włączanie światła, gdybyś miał do wyrobu 10 stanów... Nie byłoby to prostsze. Drugi powód stosowania kodu binarnego, nie dziesiętnego to jego prostota - im mniej elementów, tym mniej zależności. Im mniej zależności - tym mnie usterek. Ale dobrze, mniejsza o to skąd i po co...
Bit bitem bita pogania
Co to bit, po co to jest itd. Tak po chłopsku mówiąc, bit to cyfra liczby binarnej, czyli jeden bit to jedna “1” lub “0” w zapisanej licznie. Krótko zapis
oznacza liczbę sześć zapisaną na 3 bitach. Ale czy możemy ją zapisać na innej liczbie bitów? Tak, podobnie jak w “naszym” (dziesiętnym systemie). Wystarczy dodać odpowiednią liczbę zer przed naszą liczbą. Przecież jest dla nas naturalne, że
Tak samo w systemie binarnym
Warto jednak zaznaczyć, ze podane powyżej liczby sześc choć zapisane w tym samym systemie (binarnym) różnią się liczba bitów na ilu zostały zapisane. Są to odpowiednio 3 i 5 bitów. Niemniej jednak nie zmienia to wartości liczby i nadal pozostaje ona szóstką.
I niby to 110 to 6?
Tak, 110 jest równe liczbie 6 w zapisie dziesiętnym. Ale od początku. W naszym systemie dziesiętnym mamy jak sama nazwa wskazuje 10 cyfr. Są to kolejno liczby od 0 do 9. W systemie binarnym mamy tylko dwie cyfry - 0 i 1. Pozostałych nie ma. I teraz powraca pytanie, jak zapisać liczbę 6 za pomocą tych zer i jedynek i skąd wiadomo, gdzie co wstawić. Otóż wbrew pozorom nie jest to trudne. Dla ułatwienia zrozumienia przyjmijmy taki zapis liczb:
gdzie:
X - liczba zapisana w systemie o podstawie b
W systemie binarnym podstawą jest liczba 2 (gdyż mamy dwie cyfry), w systemie dziesiętnym podstawa jest liczba 10 (mamy 10 cyfr służących o zapisu cyfr).
Dla przykładu omawianą liczbę 6 zapiszemy tak:
co czytamy jako “liczba sześć zapisana w systemie dziesiętnym”.
Dla systemu binarnego zapiszemy ją tak
co czytamy “liczba sześć zapisana w systemie binarnym”. Oczywiście
Zapis liczb dziesiętnych
By lepiej zrozumieć zapis liczby binarnej przypomnijmy wiadomości dotyczące znanych nam liczb w postaci dziesiętnej. Do tego celu weźmy inną, większą liczbę. Niech to będzie np. 6547
Jak wiemy cyfry w zapisie dziesiętnym są “pogrupowane” w ...tysiące, setki, dziesiątki,... Rozpiszmy zatem nasza liczbę:
Tak oto przedstawia się rozwinięcie liczby 6547 w systemie dziesiętnym. By lepiej zrozumieć skąd wzięły się poszczególne potęgi 10 (baza b ) ponumerujmy zaczynając od 0 wszystkie pozycje naszej liczby.
Tak oto, zaczynając od prawej
7 stoi na pozycji “0” 4 na pozycji “1” 5 na pozycji “2” 8 na pozycji “3”
Jak łatwo zauważyć liczba pozycji jest o 1 mniejsza od ilość cyfr (ilości bitów w przypadku liczb w systemie binarnym) naszej liczby. By uzyskać zapis liczby dziesiętnej (uzyskany powyżej) wystarczy teraz każdą pozycję przemnożyć poprzez bazę podniesioną do potęgi jaką jest “pozycja” danej cyfry. Tak więc:
Podstawiając bazę b=10 uzyskamy wcześniejsze wyprowadzenie. Identycznie jest z liczbami binarnymi. Można zatem zauważyć, że ogólnie liczbę w systemie o dowolnej podstawie b możemy zapisać jako:
gdzie C oznacza pojedynczą cyfrę (w przypadku liczb binarnych o lub 1), a jej dolny indeks - jej pozycję.
Zapis liczb binarnych
Sprawdźmy zatem czy nasz poprzedni wniosek, tj.
jest prawdziwy. Postępujmy zgodnie z wcześniejszymi ustaleniami. Wyznaczmy “pozycję” dla każdego bitu.
Przystąpmy do obliczeń.
Jeżeli podstawą naszego rozumowania jest system binarny, gdzie baza równa jest 2 mamy:
Jak widać uzyskaliśmy odpowiedź na pytanie postawione w akapicie i udowodniliśmy, że
Jak zapewne zauważyłeś, w przypadku, gdy bitem jaki mnożymy jest 0 w końcowym jego wyniku i tak otrzymamy 0. Możemy więc je pominąć, gdyż nie wniosła nic do wyniku, a obliczać jedynie bity z jedynką. Po drugie jakakolwiek liczba podniesiona do zerowej potęgi daje nam 1, więc to też miejmy na uwadze. Obie te zasady znacznie “zmniejszają” ciąg obliczeń i je usprawniają.
Czy zawsze muszę pisać takie ciągi?
Hmm.. nie :) Nie musisz. Otóż istnieje pewien dość prosty sposób na wypisanie binarnej wartości i jest przydatny szczególnie dla mniejszych liczb. Oczywiście są również sposoby i na te większe liczby, al eo tym później - na chwilę obecną zajmijmy się liczbami mniejszymi. Wypiszmy sobie (bez liczenia !) wartości binarne liczb od 1 do 16. Jak to zrobić? jest to na prawdę bardzo proste. W poniższych przykładach stosowany jest 4‑btowy zapis. Jak wiesz
Pamiętasz jak wspomniałem, ze jakakolwiek liczba podniesiona do potęgi zerowej daje nam cyfrę 1? Wykorzystajmy to, by zapisać cyfrę 1 w systemie binarnym. Jak zapewne już zauważyłeś, wystarczy jeden bit, by zapisać dziesiętną cyfrę “1” w systemie binarnym. ten bit to “!”.
Możemy wykonać sprawdzenie:
Teraz wypiszmy pozostałe liczby “sposobem” Na czym on polega? Mianowicie zaczynamy od 0, gdzie w systemie binarnym mamy jak podałem wcześniej również same zera. Sposób polega na zamienianiu każdego wolnego “0” w poprzedniej liczbie w systemie binarnym na bit przeciwny, czyli jedynkę, z tym, że w poprzedniej licznie ostatni bit (pozycja 0) wynosi jeden, również jest negowany (zamieniany na wartość przeciwną). Popatrz. Kolejne zmiany względem poprzedniej liczby oznaczone są kolorem.
Jak pewnie zauważyłeś, liczba 16 nie może zostać zapisana w systemie binarnym na 4‑bitach, gdyż jest ich za mało. W związku z tym został dodany skrajny 5‑bit. Oczywiście można to tak ciągnąć dalej, jednak przecież dla wspomnianej wcześniej liczby 6547 nie będziemy wypisywać tylu pozycji. Istnieje i na to sposób.
Tworzymy tabelę:
Teraz na pierwszym miejscu w kolumnie Liczba_w_systemie_dziesiętnym wpisujemy naszą liczbę jaką chcemy zamienić na liczbę binarną i dzielimy ja przez 2. Jeżeli wynik jest z resztą - w kolumnie bit w danym wierszu wpisujemy “1”, jeżeli jest bez reszty - “0”. następnie kolejnym wierszu wpisujemy całkowita część z dzielenia. tabelę uzupełniamy dotąd, aż część całkowita z dzielenia wyniesie 0. Kolorem czerwonym zaznaczono bity. Kolorem niebieskim zaznaczono część całkowitą z dzielenia, którą przenosimy do kolejnego wiersza. Kolumna “Działanie” ma na celu pokazanie skąd biorą się poszczególne wiersze. Strzałka wskazuje kolejność zapisu bitów.
I tak mamy nasz wynik w systemie binarnym:
Polecam sprawdzić :)
Oczywiście na liczbach binarnych, podobnie jak na znanych nam liczbach dziesiętnych możemy wykonywać operacje matematyczne jak dodawanie, odejmowanie, lecz ten konkretny wpis traktuje jedynie o "wstępie" do liczb binarnych i ich zapisu.
Oczywiście każdy ma własne zdanie dotyczące danych kwestii nie zamierzam go w żaden sposób podważać, czy obrażać kogokolwiek w jakikolwiek sposób. Przepraszam także za ewentualne błędy.