Pozicinių skaičiavimo sistemų architektūra: nuo vienetų ir nulių iki šešioliktainio kodo
Per tūkstantmečius žmonijos civilizacijos sukūrė daugybę skaitinių atvaizdavimo formų – nuo senovės Šumero ir Babilono šešiasdešimtainės sistemos (kuri iki šiol nulemia mūsų 60 minučių valandas ir 360 laipsnių apskritimą) iki majų dvidešimtainio kalendoriaus. Vis dėlto šiuolaikiniame pasaulyje dominuoja dvi pagrindinės ašys: dešimtainė sistema (Base 10), nulemta dešimties biologinių žmogaus rankų pirštų, ir dvejetainė sistema (Base 2), kurioje egzistuoja tik vienetai ir nuliai.
1703 m. vokiečių filosofas ir polimatas Gottfriedas Wilhelmas Leibnizas paskelbė veikalą „Explication de l'Arithmétique Binaire“, įrodydamas, kad absoliučiai kiekvieną matematinį dydį ir loginę operaciją galima išreikšti naudojant vos du simbolius: 0 ir 1. Leibnizas šią koncepciją siejo su senovės Kinijos „I Ching“ (Permainų knygos) heksagramomis bei gilia filosofine idėja apie kūrimą iš nieko (0) ir vienovės (1). Po daugiau nei dviejų šimtmečių, 1937 m., Claude'as Shannonas savo magistro darbe matematiškai sujungė George'o Boole'io algebrą su elektromechaninėmis relėmis, įrodydamas, kad silicio tranzistoriai (kurie fiziškai tėra mikroskopiniai jungikliai, praleidžiantys arba blokuojantys elektros srovę – įtampa yra arba jos nėra) idealiai įkūnija binarinę logiką.
Kaip veikia skaičių konvertavimas: matematinis aparatas
Kiekviena pozicinė skaičiavimo sistema remiasi baze (radiksu) b. Bet kurioje sistemoje skaičiaus dndn-1...d1d0 vertė apskaičiuojama kaip kiekvieno skaitmens ir bazės laipsnio sandaugų suma:
Reikšmė = dn × bn + dn-1 × bn-1 + ... + d1 × b1 + d0 × b0
1. Konvertavimas iš vienetų ir nulių į dešimtainius (Polinominis skleidimas)
Norint konvertuoti dvejetainį skaičių (sudarytą iš vienetų ir nulių) į įprastą dešimtainį formatą, kiekvienas bitas dauginamas iš 2 laipsnio, atitinkančio jo pozicijos indeksą (skaičiuojant nuo 0 iš dešinės į kairę). Pavyzdžiui, paimkime dvejetainį baitą 11010110₂:
- (1 × 27) + (1 × 26) + (0 × 25) + (1 × 24) + (0 × 23) + (1 × 22) + (1 × 21) + (0 × 20)
- = 128 + 64 + 0 + 16 + 0 + 4 + 2 + 0 = 21410
2. Konvertavimas iš dešimtainių į dvejetainius (Nuoseklaus dalijimo algoritmas)
Atvirkštinis procesas – dešimtainio skaičiaus vertimas į vienetus ir nulius arba bet kurią kitą bazę b – atliekamas nuoseklaus dalijimo iš bazės su liekanų fiksavimu metodu:
- Dešimtainis skaičius dalijamas iš tikslinės bazės b (pvz., iš 2).
- Užrašomas sveikasis dalmuo ir gauta liekana (dvejetainėje sistemoje liekana visada yra
0arba1). - Gautas dalmuo vėl dalijamas iš bazės, kol pasiekiamas nulis (0).
- Gautos liekanos nuskaitomos atvirkštine tvarka (nuo paskutinės iki pirmosios), taip suformuojant galutinį binarinį skaičių.
Alternatyvios bazės: kodėl dvyliktainė (Base 12) ir šešioliktainė (Base 16) yra pranašesnės
Nors dešimtainė sistema tapo visuotiniu standartu dėl žmogaus anatomijos, matematiniu požiūriu ji nėra pati efektyviausia:
- Dvyliktainė sistema (Duodecimal / Dozenal, Base 12): Skaičius 12 turi net keturis netrivialius daliklius (2, 3, 4, 6), o skaičius 10 – vos du (2, 5). Dėl to dvyliktainėje sistemoje tokios fundamentalios trupmenos kaip 1/3 = 0,412, 1/4 = 0,312 ir 1/6 = 0,212 tampa baigtiniais skaičiais, užuot tapusios begalinėmis periodinėmis trupmenomis (1/3 = 0,333...10). Ne veltui iki šiol kiaušinius ar indus skaičiuojame tuzinais, o paroje turime 2 × 12 valandų.
- Šešioliktainė (Hexadecimal, Base 16) ir Aštuntainė (Octal, Base 8): Kadangi 16 = 24 ir 8 = 23, šios sistemos idealiai sugrupuoja bitus. Tiksliai 4 binariniai bitai (pusbaitis / nibble) atitinka vieną šešioliktainį simbolį (pvz.,
1111₂ = F₁₆), o 8 bitų baitas visada užrašomas lygiai 2 šešioliktainiais simboliais (nuo0x00iki0xFF). Tai yra nepakeičiamas standartas kompiuterių atminties adresams, spalvų kodams (HEX) ir IPv6 tinklams. - Base 32 ir Base 36: Naudojamos kompaktiškam duomenų perdavimui (pvz., TOTP dviejų veiksnių autentifikacijos slaptiems raktams, geohash koordinatėms ir trumpoms URL nuorodoms).
Neigiami skaičiai ir bitų aritmetika: Papildomas kodas (Two's Complement)
Kompiuterių procesoriai (ALU) negali saugoti matematinio minuso ženklo šalia tranzistoriaus. Neigiamiems sveikiesiems skaičiams realizuoti naudojamas papildomas kodas (Two's Complement):
- N bitų registre vyriausiasis bitas (MSB) atlieka neigiamo svorio funkciją (-2N-1).
- 8 bitų registre be ženklo:
11111111₂ = 255. - 8 bitų registre su ženklu:
11111111₂ = -128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = -1. - Skaičiaus ženklo keitimas atliekamas apverčiant visus bitus (NOT) ir pridedant 1. Tai leidžia procesoriui atlikti atimtį naudojant tą pačią sudėties schemą.
Praktinis pritaikymas: nuo mikrokontrolerių iki IP potinklių
Suvokimas, kaip vienetai ir nuliai virsta skaičiais, yra būtinas kiekvienam programuotojui ir IT inžinieriui:
- IP tinklų kaukės (Subnetting): IPv4 adresai (pvz.,
192.168.1.1) ir kaukės (pvz.,/24 = 255.255.255.0 = 11111111.11111111.11111111.00000000₂) yra gryna binarinė logika maršrutizatoriuose. - Mikrokontroleriai ir registrai: Programuojant mikrovaldiklius (ARM, AVR, ESP32), aparatiniai prievadai ir jutiklių vėliavėlės valdomos atskirų bitų kaukėmis per bitų poslinkio operacijas (
<<,>>,AND,OR). - UTF-8 koduočių analizė: Visi šiuolaikinio interneto simboliai ir emocijos koduojami binariniais baitų prefiksais (pvz.,
110xxxxx,1110xxxx).