Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

O bitach i liczbach binarnych ogółem

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. 

windows sprzęt inne

Komentarze

0 nowych
Frankfurterium   10 #1 22.03.2013 12:11

A liczby ujemne i ułamki? ;-)

  #2 22.03.2013 12:28

"Ale dlaczego 0 i 1?"

Nie zgodzę się z argumentacją autora. To nie tak, że jest to zdeterminowane przez fakt, iż dla nas zmiana stanu światła na 2 położeniach to rzecz prostsza. Nie jest to też przez niezawodność. Gdyby się dało, to wiele stanów pozwoliłoby na o wiele szybsze przesyłanie danych.
Co jest więc problemem? Niedokładność stanów, czasy propagacji itd. Zobaczmy jakie są różnice dla stanu 0 i 1 - załóżmy, że logiczne 0 to 0V, a logiczne 1 to 5V. Co się dzieje przy 4V, co przy 3,256V? W ogóle, czy kiedykolwiek mamy sytuację, w której jest równiutko 5V? Nie za bardzo. Ale dla dwóch stanów odpowiednio odczytywać te informacje z jakichś zakresów to nie jest problem. Teraz dorzućmy stan "2" np. dla 2,5V. Robi się niemiło.

Autor edytował komentarz.
Jaahquubel_   13 #3 22.03.2013 13:08

Mam poważne wątpliwości, czy jest sens na blogu DP pisać o sprawach tak podstawowych, znanych od pokoleń i zylion razy już opisanych.
Bo że nie ma sensu wrzucać tego na główną, to jestem przekonany w 100%.

arlid   14 #4 22.03.2013 13:27

@Frankfurterium
Nie chciałem wszystkiego mieszać, by nie było "za dużo" naraz. A miałbyś ochotę poczytać? :P

@lukasamd
Owszem, masz rację. Jednak jak wspomniałem na początku, nie chciałem "naukowo". Bardzie ogólnie, by łatwiej było zrozumieć o co w tym chodzi. Spoglądając nawet na samo napięcie z gniazdku - ono również ma wahania. Przykład ze "światłem" miał zobrazować o co mniej więcej chodzi. Oczywiście przy każdym włączaniu możesz mieć na żarówce inne natężenie (tolerancja) to światło masz włączone. Ogólnie celem wpisu było pokazanie w jakiś przejrzysty sposób jak się do tego "zabrać" :P

darasz89   4 #5 22.03.2013 14:19

tak naprawdę najefektywniej kodować w systemie zbliżonym do liczby e :)
jako, że występują kłopoty z odczytem napięcia zastosowano 2, a nie 3 która byłaby o wiele lepsza :P

revcorey   7 #6 22.03.2013 14:50

Były procki oparte o system dziesiętny i inne. Ale były problemy z odpowiednim ustawieniem poziomów sygnałów.

alucosoftware   7 #7 22.03.2013 14:55

@arlid
Kilka literówek, ale miło się czytało. Wiadomości są podstawowe, ale ideą wpisu było zaprezentowanie treści w przystępny sposób - dla każdego. Chyba się udało. Dlatego też zasłużenie jest na głównej. Ale... FOG i tak pewnie większy niż zamierzony :)

Użytkownicy portalu to nie tylko kilka setek stałych użytkowników, to także tysiące innych osób (w różnym wieku), dla których tematyka IT (w tym matematyka) nie były szeroko znane, a może nawet lubiane. Na pewno znajdą się czytelnicy tego wpisu i podobnych.

LonngerM   12 #8 22.03.2013 15:30

Jeśli się nie mylę próbowano w przeszłości tworzyć układy 10 stanowe, ale problemem właśnie była niedokładność o której już wspominał lukasamd. Układy wielostanowe zależne od napięcia nie mają prawa istnieć gdyż nie jest to fizycznie możliwe zawsze nadawać idealne napięcie. Na papierze to ładnie wygląda, ale niestety rzeczywistość to nie bajka.

Scorpions.B WSPÓŁPRACOWNIK  21 #9 22.03.2013 15:49

"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)"
Jak to? ;(
Matematyka jest kochana ;)

arlid   14 #10 22.03.2013 17:29

@alucosoftware
Dzięki za dobre słowo :) Właśnie o taką ideę wpisu mi chodziło- o pokazanie czegoś w mniej , nazwijmy to może "książkowy" sposób.

@Scorpions.B
A czy ja twierdze, że nie ? ;) Tak naprawdę, to spotykamy się z nią na każdym kroku :P

msnet   19 #11 22.03.2013 17:45

Hmmm... Czyżby na DP otwarto przedszkole?

kwpolska   6 #12 22.03.2013 17:49

IMO trochę małe obrazki z TeXu, a to “Liczba_w_systemie_dziesiętnym” nie miało sensu. A zamiast gwiazdki — \times.

llindelou   7 #13 22.03.2013 19:07

I tu widać zastosowanie LaTeX-a :)

revcorey   7 #14 22.03.2013 19:52

"A czy ja twierdze, że nie ? ;) Tak naprawdę, to spotykamy się z nią na każdym kroku :P"
Ty chyba matematyki nie widziałeś :P
Dodawanie i mnożenie paru liczb to cóż podstawowe działania nie co przesadzać.

kostek135   8 #15 22.03.2013 23:58

"Pamiętasz jak wspomniałem, ze jakakolwiek liczba podniesiona do potęgi zerowej daje nam cyfrę 1?"

Nie byłbym pewien czy 0^0 da ci 1. Można jakiś dowód? Bo inne wartości w pierścieniu liczb całkowitych, są raczej trywialne.

A tak innych pytań nie mam.

Autor edytował komentarz.
arlid   14 #16 23.03.2013 08:40

@kwpolska
Dzięki, na drugi raz użyje \times :) Chyba z przyzwyczajenia te gwiazdki :P

@llindelou
Tak :) Właśnie po części po to Cię pytałem o LaTeXa :)

@revcorey
Wiem :) Bardziej miałem na myśli, że samochody, budynki i wszystko co nas otacza w mniejszym, czy większym stopniu tez było wyliczane :P

@kostek135
Właśnie z tym 0^0 jest "problem" bo to jest traktowane bardziej jako symbol nieoznaczony i jest to kwestia sporna. Jej rozpatrywanie jest często zależne od sytuacji. Można zarówno pokazać, że to jest 0 jak i, że to jest 1. Lecz "ogólnie" (często dla ułatwień) przyjmuje się 1. Choć zdarzają się przypadki, gdzie jest podany warunek, ze potęgowanie to wynosi 0.

Savpether   6 #17 23.03.2013 13:49

@arlid

Co do wytłumaczenia, dlaczego 0 i 1 to nie chodzi o naukowość tylko błędnie dobrany przykład.

0 i 1 dlatego, że urządzenia elektronicznie pracują pewnie tylko w tych dwóch stanach OBECNIE, co nie oznacza, że tak musi być ciągle. Od jakiegoś czasu testowany jest wielostan - to nie jest naukowo, to własnie jest łopatologicznie. A, że prościej się nie da? Trudno :)

Co do 0^0, wszystko zależy od ustawienia znaczników rejestru koprocesora. Tak samo jak np. ułamki, przecież wiele liczba ułamkowych w ogóle nie da się zapisac bitowo w komputerze, dlatego odpowiedni rejestr koprocesora jest domyslnie ustawiony na nie zgłaszanie wyjątków, tylko na kontynuowanie operacji z przybliżeniami.

Przykładowo:

0,1 + 1 != 1,1 dla procesora :) to jest tylko przybliżenie, dlatego testowany jest wielostan. Zaś na metodach numerycznych to dopiero jest bajka :D Okazuje się, że wiele wzorów należy modyfikować by komputery liczyły dokładniej, chociażby takie głupie równanie kwadratowe, dlatego wielki ukłon w stronę twórców wolfram alpha i biblioteki math.h :)

Autor edytował komentarz.
LordRuthwen   6 #18 23.03.2013 17:34

Ile to jest 1+1?
Możesz zadać to pytanie każdemu i większość odpowie, że 2, to mu powiedz, że 10 :P

kr2ysiek   7 #19 23.03.2013 19:54

Jeszcze można wspomnieć o prostszym sposobie przeliczania liczb binarnych na dziesiętne i odwrotnie, przydatnym dla adresów sieciowych.
Wypisujemy kolejno potęgi liczby 2 (128, 64, 32, 16, 8, 4, 2, 1), pod nimi wpisujemy liczbę binarną. Następnie dodajemy te gdzie mamy cyfrę 1. Przy zamianie odwrotnej na system binarny, od liczby dziesiętnej odejmujemy potęgę liczby 2 i wpisujemy pod nią 1. Jak się nie mieści, to wpisujemy 0.

Mogłeś wspomnieć jeszcze o algebrze Boole'a. ;)

Scorpions.B WSPÓŁPRACOWNIK  21 #20 23.03.2013 22:27

@arlid
Zgadzam się. Z matematyką spotykam się na każdym kroku, sporo osób nie zdaję sobie sprawy jak matematyka może być pomocna. Sporo osób myśli, że matematyka to tylko jakieś obliczenia w szkole. Matematyka uczy logicznego myślenia, jej dobra znajomość naprawdę ułatwia życie i nie mówię tylko o obliczaniu pola, czy jej wykorzystanie w informatyce ;)

arlid   14 #21 24.03.2013 09:53

@LordRuthwen
Tak :P hehe :)

@kr2ysiek
Jak pisałem wcześniej chodziło mi bardziej o podstawy. Nie chciałem mieszać zbyt dużo informacji. Po prostu chciałem uniknąć natłoku :P Zawsze można jednak to rozwinąć :)

  #22 24.03.2013 13:49

ENIAC - jeden z pierwszych komputerów - liczył w systemie dziesiętnym i dobrze mu z tym było :).

Over   9 #23 24.03.2013 21:34

Jak dla mnie większość to magia, ale wpis fajny taki realistyczno optymistyczny ;)
Matma to zło jak dla mnie ale radzę sobie z nią inaczej na swój sposób na co dzień:-)

Autor edytował komentarz.
m1k3   4 #24 25.03.2013 10:30

panowie, zgodzę się że to są podstawy, ale jeśli chociaż jednej osobie pomogą zrozumieć o co chodzi z tym wszystkim, to wpis jest wartościowy.
Wam tez nie przedstawiano trudniejszych rzeczy od razu i nie kazano na pierwszych zajeciach liczyc całki po elipsie zorientowanej, wiec wiecej luzu, tym bardziej ze słychać zewsząd, że wiekszość ludzi opuszczających mury wszelkich informatycznych studiów wyzszych nie potrafi programować..

  #25 03.08.2013 00:53

@m1k3
dzięki za wytłumaczenie tego poprzednikom, bo ja pewnie nie zrobiłbym tego tak grzecznie :)

  #26 07.05.2015 15:15

Szkoda, że nie wziąłeś pod uwagę kodowania liczb U1 i U2, jak i operacji arytmetycznych na ww. kodowaniach

  #27 05.08.2016 08:02

Tlumaczenie bardzo dobre. ...auf napiecie was gniazdkach sprawdzac nozyczkami Lub jezykiem (dla filozofow)