Systemy bazowe takie jak binarny i szesnastkowy wydają się nieco dziwne na początku. Kluczem jest zrozumienie, jak różne systemy „tykają” jak licznik kilometrów, gdy są pełne. Baza 10, nasz system dziesiętny, „tyka”, gdy osiągnie 10 pozycji, tworząc nową cyfrę. Czekamy 60 sekund przed „tykaniem” do nowej minuty. Szesnastkowy i dwójkowy są podobne, ale zmieniają się odpowiednio co 16 i 2 pozycje.
Spróbuj konwersji liczb na szesnastkowe i dwójkowe tutaj:
Dawniej: Unary Numbers
Way back in the day, nie mieliśmy systemów bazowych! To było pod górę w obie strony, przez śnieg i upał. Gdy chciałeś policzyć jeden, pisałeś:
l
Gdy chciałeś mieć 5, pisałeś
lllll
I jasne, 1 + 5 = 6
l + lllll = llllll
To jest najprostszy sposób liczenia.
Wejście Rzymian
W cyfrach rzymskich dwa oznaczało jeden, dwa razy. Trzy to jeden, trzy razy:
one = Itwo = IIthree = III
Jednakże zdecydowali, że mogą zrobić coś lepszego niż stara tradycja linii na piasku. Dla pięciu, możemy użyć V do reprezentowania lllll i uzyskać coś jak
l + V = Vl
Nieźle, co? I oczywiście, jest wiele więcej symboli (L, C, M, itd.), których możesz użyć.
Kluczowym punktem jest to, że V i lllll są dwoma sposobami kodowania liczby 5.
Nadaj każdej liczbie nazwę
Kolejnym przełomem było uświadomienie sobie, że każda liczba może być swoją własną odrębną koncepcją. Zamiast reprezentować trzy jako serię jedynek, nadaj jej własny symbol: „3″. Zrób to od jednego do dziewięciu, a otrzymasz symbole:
1 2 3 4 5 6 7 8 9
Rzymianie byli blisko, tak blisko, ale dali tylko unikalne symbole dla 5, 10, 50, 100, 1000, itd.
Użyj swojej pozycji
Teraz jasne jest, że nie możesz dać każdej liczbie jej własnego symbolu. Jest ich po prostu zbyt wiele.
Ale zauważ jedno spostrzeżenie na temat liczb rzymskich: używają one pozycji symboli, aby wskazać znaczenie.
IV oznacza „odejmij 1 od 5″
i VI oznacza „dodaj 1 do 5″.
W naszym systemie liczbowym, używamy pozycji w podobny sposób. Zawsze dodajemy i nigdy nie odejmujemy. I każda pozycja jest o 10 większa niż ta przed nią.
Nasz wybór podstawy 10
Dlaczego wybraliśmy mnożenie przez 10 za każdym razem? Najprawdopodobniej dlatego, że mamy 10 palców.
Jednym z punktów do uświadomienia sobie jest to, że potrzebujesz wystarczająco dużo cyfr, aby „wypełnić”, aż trafisz na następną liczbę. Pozwól mi zademonstrować.
Jeśli chcemy przewrócić licznik co 10, że tak powiem, potrzebujemy symboli dla numerów od jednego do dziewięciu; nie osiągnęliśmy jeszcze dziesięciu. Wyobraź sobie liczby jako tykające powoli w górę – w którym momencie przewracasz kolejną jednostkę i zaczynasz od zera?
Wprowadź zero
A co się stanie, gdy dojdziemy do dziesięciu? Jak pokazać, że chcemy dokładnie jedną „dziesiątkę” i nic w kolumnie „jedynki”?
Używamy zera, liczby, która nie istnieje. Zero to dość skomplikowana koncepcja, jest to placeholder, puste miejsce, przestrzeń i wiele więcej. Wystarczy powiedzieć, że zero jest jednym z wielkich wynalazków wszechczasów.
Zero pozwala nam mieć pusty placeholder, coś, czego Rzymianie nie mieli. Spójrz, jak nieporęczne są ich liczby bez tego.
Słynna powieść George’a Orwella „1984” miałaby postać „MCMLXXXIV”! Łatwo się toczy po języku, prawda?
Rozważając inne bazy
Pamiętaj, że wybraliśmy przewracanie naszego licznika kilometrów co dziesięć. Nasze liczenie wygląda następująco:
123456789 (uh oh, I'm getting full!)10 (ticked over – start a new digit)
A co by było, gdybyśmy liczyli co 60, tak jak robimy to w przypadku sekund i minut?
1 second2345…58591:00 (60 seconds aka 1 minute. We've started a new digit.)
Wszystko jest w porządku, prawda? Zauważ, że używamy dwukropka (:), aby wskazać, że jesteśmy przy nowej „cyfrze”. W podstawie 10, każda cyfra może stać samodzielnie.
Spróbuj podstawę 16
Jeśli chcemy podstawę 16, możemy zrobić coś podobnego:
123456789101112131415 (we're getting full)1:00 (16 – we've started a new digit)
Jednakże, nie chcemy pisać liczb szesnastkowych z notacją dwukropka (chociaż moglibyśmy). Wolimy gotować osobne symbole dla 10-15, abyśmy mogli po prostu pisać liczby tak, jak jesteśmy do tego przyzwyczajeni. Skończyły nam się cyfry (1-9 już użyte, z 0 jako placeholder), więc potrzebujemy innych symboli. Moglibyśmy użyć jakichś kwadratowych linii lub innych kształtów, ale konwencją jest używanie liter w stylu rzymskim. Tak jak 5 stało się V, programiści używają liter A-F, aby uzyskać wystarczającą ilość cyfr do 16. To jest,
123456789A (10 – we're using the symbol "A")B (11)C (12)D (13)E (14)F (15 – uh oh, we're getting full)10 (16 – we start a new digit)
Ahah! Teraz możemy użyć jednej cyfry na „miejsce”, i wiemy, że 10 faktycznie oznacza, że mamy „ticked over do 16″ raz.
20 oznacza, że mamy ticked over do 16 dwa razy (32).
25 oznacza, że mamy ticked over do 16 dwa razy (dając nam 32) i poszedł dodatkowe 5. Suma wynosi 32 + 5 = 37.
Quick review
With me so far? To jest całkiem fajne, prawda? Możemy liczyć w dowolnym systemie, jaki tylko chcemy. Zauważ również, że podstawa 16 jest bardziej „efektywna przestrzennie” w tym sensie, że możemy napisać liczbę taką jak 11 w jednej cyfrze: B.
Baza 16 naprawdę nie różni się aż tak bardzo od bazy 10, po prostu jej zapełnienie zajmuje nam więcej czasu.
Cudowny świat binarności
Widzieliśmy już mnóstwo systemów bazowych, od nazbyt prostego unary, przez nieokiełznane cyfry rzymskie, stabilnie działającą bazę 10 i zwartą bazę 16.
Co jest wspaniałego w binarności? W duchu utrzymania rzeczy prostych, jest to najprostszy system liczbowy, który ma koncepcję „tykania”. Unary, gdzie po prostu piszemy 1, 11, 111… po prostu idzie w nieskończoność. Binarny, z dwoma opcjami (1 i 0) wygląda tak:
1: 12: 10 (we're full – tick over)3: 114: 100 (we're full again – tick over)5: 1016: 1107: 1118: 1000 (tick over again)…
i tak dalej.
Ponieważ binarny jest tak prosty, jest bardzo łatwy do wbudowania w sprzęt. Trzeba tylko rzeczy, które mogą włączyć lub wyłączyć (reprezentujących 1 i 0), a nie rzeczy, które mają 10 możliwych stanów (do reprezentowania decimal).
Ponieważ jest to tak proste, binarny jest również odporny na błędy. Jeśli twój sygnał jest „częściowo włączony” (powiedzmy 0,4), możesz założyć, że jest to zero. A jeśli jest w większości włączony (powiedzmy 0,8), to można założyć, że jest to 1. Jeśli używasz systemu z 10 możliwymi stanami, trudno jest powiedzieć, kiedy wystąpił błąd. Jest to jeden z powodów, dla których sygnały cyfrowe są tak odporne na szum.
Inne przykłady baz
Używamy innych baz przez cały czas, nawet dynamicznie zmieniających się baz. Zazwyczaj nie myślimy o tym w ten sposób:
Godziny, minuty, sekundy: 1:32:04
- Wiemy, że jest to 1 godzina, 32 minuty, 4 sekundy. W sekundach jest to 16060 + 32*60 + 4.
Stopy i cale: 3′ 5″
- To jest 3 stopy, 5 cali lub 3 * 12 + 5 cali.
Funty i uncje: 8 lbs, 5 oz
- Since a pound is 16 oz, This is 8 * 16 + 5 oz. Używaliśmy systemu liczbowego o podstawie 16 przez cały czas!
Parting thoughts
„10″ w dowolnym systemie liczbowym wskazuje podstawę i oznacza, że przekroczyliśmy ją raz. 10 w systemie binarnym oznacza dwa, 10 w dziesiętnym oznacza dziesięć, a 10 w szesnastkowym to szesnaście.
Jak rozdzielić te liczby? Programiści często piszą „0b” przed liczbami binarnymi. Tak więc 2 w systemie binarnym to
0b10
Podobnie, będą pisać 0x przed liczbami szesnastkowymi. Więc 16 w systemie szesnastkowym to:
0×10
Jeśli nie ma żadnych symboli (0b lub 0x) z przodu, zakładamy, że jest to liczba bazowa 10, zwykła liczba.
Teraz idź naprzód i ciesz się swoją nową wiedzą!
Inne posty z tej serii
- Systemy liczbowe i podstawy
- Szybki przewodnik po GUIDach
- Zrozumienie szybkiego odwrotnego pierwiastka kwadratowego w Quake’u
- Proste wprowadzenie do sieci komputerowych Networking
- Zamień dwie zmienne używając XOR
- Zrozumienie Big i Little Endian Byte Order
- Unicode and You
- Drobiazg o formatach plików binarnych
- Algorytmy sortowania
.