2008-01-21

System binarny

System binarny zwany też dwójkowym, jest systemem "ojczystym" każdego dzisiejszego komputera. Najprawdopodobniej dlatego że ogranicza się do dwóch stanów, albo jest napięcie albo go nie ma. Co prawda w pierwszych komputerach próbowano używać dziesiątkowego(decymalnego/arabskiego) systemu liczbowego, ale trudna implementacja spowodowała przejście do systemu binarnego, który jest na pozór trudniejszy. Ten pozór tworzy fakt że jesteśmy przyzwyczajeni do systemu decymalnego. Dobra przejdźmy do rzeczy...

W systemie binarnym operujemy dwoma cyframi, 1 i 0, a więc mamy podstawę 2. Tego dowiedziałeś się z poprzedniej notki. Na początku przedstawię jak zamienić liczbę decymalną na binarną. Weźmy jakąś liczbę, no załóżmy mój numer GG. :) Pierw przedstawię przykład, a później go wytłumaczę.
DzialanieReszta
8738123/2=43690611
4369061/2=21845301
2184530/2=10922650
1092265/2=5461321
546132/2=2730660
273066/2=1365330
136533/2=682661
68266/2=341330
34133/2=170661
17066/2=85330
8533/2=42661
4266/2=21330
2133/2=10661
1066/2=5330
533/2=2661
266/2=1330
133/2=661
66/2=330
33/2=161
16/2=80
8/2=40
4/2=20
2/2=10
1/2=01

Teraz zapiszmy naszą resztę od dołu, tzn. wspak. Wyszło więc 100001010101010101001011b. Hmm... A więc dobra... No to tak, co zrobiliśmy?
Mieliśmy liczbę wyjściową, nazwijmy ją sobie x, miała ona wartość 8738123. Dzieliliśmy ją przez 2 dopóki x nie było równe 0, a resztę zapisywaliśmy. x miało wartość naszego ostatniego wyniku. Mam nadzieje że rozumiesz.

Teraz spróbujmy naszą pięknie długą liczbę binarną odmienić na taką, jaka była na początku. Są dwie metody które są bardzo popularne, jedna się opiera na matmie, druga jest metodą tabelkową. Pierw przedstawię metodę tabelkową. Robimy sobie tabelkę, coś takiego:
1024 512 256 128 64 32 16 8 4 2 1
Później piszemy sobie naszą liczbę binarną pod kolejnymi liczbami i uzyskujemy liczbę dziesiętną, spróbuj sam poszerzyć tą tabelkę i tym sposobem przekształcić mój nrGG z systemu binarnego na system decymalny. Ja teraz przedstawię drugą metodę, ta metoda potrzebuje więcej liczenia, ale łatwiej ją wbudować w program.
100001010101010101001011b=
1*2**0+1*2**1+0*2**2+1*2**3+0*2**4+0*2**5+1*2**6+0*2**7+1*2**8+0*2**9+
1*2**10+0*2**11+1*2**12+0*2**13+1*2**14+0*2**15+1*2**16+0*2**17+1*2**18+
0*2**19+0*2**20+0*2**21+0*2**22+1*2**23=
1*2**0+1*2**1+1*2**3+1*2**6+1*2**8+1*2**10+1*2**12+1*2**14+1*2**16+1*2**18+
1*2**23=8738123
Dobra, a więc co my tutaj zrobiliśmy? Po pierwsze odwróciliśmy znowu naszą liczbę binarną. Teraz po prostu mnożymy każdą cyfrę naszej liczby binarnej z potęgą liczby dwa o wykładniku równym numerowi pozycji od lewej strony licząc od zera. Pierw podałem liczbę binarną, później działanie zgodne z poprzednim zdaniem. Kolejnym działaniem jest tym samym działaniem tylko że wyciełem cyfry 0 liczby binarnej. Na końcu jest ofc wynik.
Dla poćwiczenia spróbuj zamienić tą metodą na liczby decymalne:
101b
1011b
101101b
10011001b
10101010b
Metodą tabelkową:
10101b
10001b
101010101b
100010001b
10000b
Oraz zamień na liczby binarne:
11
2
1993
2008
2116
9345
2012
643
352
234
101
Odpowiedzi zostały zakodowane za pomocą base64 którego dekoder znajdziesz tutaj.
T2Rwb3dpZWR6aSBkbyB6YWRhbmlhIDE6
DQo1DQoxMQ0KNDUNCjE1Mw0KMTcwDQ
pPZHBvd2llZHppIGRvIHphZGFuaWEgMjoN
CjIxDQoxNw0KMzQxDQoyNzMNCjE2DQpP
ZHBvd2llZHppIGRvIHphZGFuaWEgMzoNCj
EwMTFiDQoxMGINCjExMTExMDAxMDAxYg
0KMTExMTEwMTEwMDBiDQoxMDAwMDEw
MDAxMDBiDQoxMDAxMDAxMDAwMDAwM
WINCjExMTExMDExMTAwYg0KMTAxMDAw
MDAxMWINCjEwMTEwMDAwMGINCjExMTA
xMDEwYg0KMTEwMDEwMWI=

1 komentarz:

Anonimowy pisze...

SUPER! jak każdy Twój blog ma sens i jest po prostu pożyteczny... gdy moja klasa to zobaczyła to tylko ja wiedziałem (bez przeczytania tego) co to jest ;P