Skaičių sistemų keitiklis: BIN/HEX/DEC/OCT su neigiamais skaičiais
Kompiuterių pasaulis veikia nuliais ir vienetais, bet žmonės mąsto dešimtimis. O programuotojai? Jie turi suprasti viską tarp jų. Nesvarbu, ar derinate žemo lygio kodą, nustatote spalvas CSS, skaičiuojate IP kaukes ar sprendžiate informatikos užduotis, susiduriate su būtinybe konvertuoti skaičius tarp skaičių sistemų.
Įprasti skaičiuotuvai „Windows“ ar mobiliajame telefone dažnai yra lėti ir nepatogūs. Mūsų išmanusis skaičių sistemų keitiklis buvo sukurtas kūrėjų kūrėjams. Jis siūlo momentinį konvertavimą realiuoju laiku, palaiko ypač didelius skaičius ir, kaip vienas iš nedaugelio internetinių įrankių, teisingai apdoroja neigiamus skaičius dvejetainėje formoje.
Ką gali šis skaičių sistemų keitiklis?
Kurpdami šį valdiklį, mes sutelkėme dėmesį į dažniausiai pasitaikančių programuotojų problemų sprendimą:
- Reaktyvumas realiuoju laiku: Jokio mygtuko „Skaičiuoti“. Pradėkite rašyti į HEX laukelį ir iškart matysite, kaip keičiasi BIN ir DEC.
- Neigiamų skaičių palaikymas (Signed Integers): Dauguma internetinių keitiklių sugenda, kai įvedate
-5. Mūsų – ne. Pasirinkę bitų gylį (8, 16, 32, 64 bitai), imituojame tikslų procesoriaus veikimą, naudodami vadinamąjį dviejų papildymo kodą. - Dvejetainio kodo skaitomumas: Žiūrėti į
1110101011011110yra varginanti. Mūsų įrankis gali automatiškai formatuoti išvestį po 4 bitus (nibbles) į1110 1010 1101 1110, o tai radikaliai sumažina klaidų skaičių perrašant. - BigInt palaikymas: Reikia konvertuoti 64 bitų skaičių ar maišos kodą? Standartinis JavaScript baigiasi ties $2^{53}$ skaičiumi. Mūsų variklis tvarko bet kokio ilgio skaičius „Tik teigiami“ režimu.
Skaičių sistemų vadovas: kada kurią naudoti?
1. Dešimtainė skaičių sistema (DEC - Decimal)
- Pagrindas: 10 (skaitmenys 0-9)
- Naudojimas: Kasdienis gyvenimas, finansai, ciklų skaičiavimas kode.
- Įdomu: Kompiuteriai jos nesupranta, turi konvertuoti į dvejetainę.
2. Dvejetainė skaičių sistema (BIN - Binary)
- Pagrindas: 2 (skaitmenys 0, 1)
- Naudojimas: Mašininis kodas, loginiai vartai, IP adresų maskavimas.
- Patarimas: Kiekvienas skaitmuo atitinka vieną bitą. 8 bitai sudaro 1 baitą (Byte).
3. Šešioliktainė skaičių sistema (HEX - Hexadecimal)
- Pagrindas: 16 (skaitmenys 0-9, raidės A-F)
- Naudojimas: Kompaktiškas dvejetainio kodo užrašymas. Vienas HEX simbolis atitinka tiksliai 4 bitus (nibble). Du simboliai (pvz.,
FF) atitinka visą baitą. - Pavyzdžiai:
- Spalvos internete:
#FF5733(Raudona, Žalia, Mėlyna). - MAC adresai:
00:1A:2B:3C:4D:5E. - Atminties išklotinės (Memory dumps).
- Spalvos internete:
4. Aštuntainė skaičių sistema (OCT - Octal)
- Pagrindas: 8 (skaitmenys 0-7)
- Naudojimas: Istoriškai senesni kompiuteriai, šiandien ypač Linux leidimai (chmod).
- Pavyzdys: Komanda
chmod 755nustato teises rwx-rx-rx (skaityti, rašyti, vykdyti).
Kaip teisingai dirbti su neigiamais skaičiais?
Tai pažangiausia mūsų keitiklio funkcija. Kompiuterio atmintyje nėra „minuso“ ženklo. Kad kompiuteris išsaugotų neigiamą skaičių, dažniausiai naudojamas dviejų papildymo kodas (Two’s Complement) metodas.
Tačiau neigiamo skaičiaus konvertavimo rezultatas priklauso nuo to, kiek bitų yra skirta kintamajam. Todėl viršutinėje juostoje rasite perjungiklį Bitų gylis.
Pavyzdys: Kaip atrodo skaičius -5?
Išbandykite patys mūsų keitiklyje:
-
Nustatykite gylį į 8-bitų.
- Įveskite į DEC:
-5. - HEX rezultatas:
FB. - BIN rezultatas:
1111 1011. - Paaiškinimas: $256 - 5 = 251$ (kas yra FB).
- Įveskite į DEC:
-
Nustatykite gylį į 16-bitų.
- Įveskite į DEC:
-5. - HEX rezultatas:
FFFB. - Paaiškinimas: Kadangi turime daugiau vietos, „vienetai“ užpildo likusią erdvę kairėje.
- Įveskite į DEC:
-
Nustatykite gylį į Tik teigiami (Unsigned).
- Jei įvesite
-5, laukelis paraus. Šis režimas nepalaiko neigiamų skaičių, nes tam reikėtų begalybės vienetų.
- Jei įvesite
Pro patarimas: Jei dirbate su spalvomis ar IP adresais, visada naudokite “Tik teigiami” režimą. Jei sprendžiate užduotis C/C++ ar asembleryje, perjunkite į 32-bitų arba 64-bitų režimą.
Greitų konversijų lentelė (Cheat Sheet)
Greitai orientacijai pateikiame pagrindines reikšmes, kurias kiekvienas “IT specialistas” turėtų žinoti mintinai.
| Dešimtainis (DEC) | Šešioliktainis (HEX) | Dvejetainis (BIN) | Pastaba |
|---|---|---|---|
| 0 | 00 | 0000 | Nulis |
| 1 | 01 | 0001 | |
| 10 | 0A | 1010 | |
| 15 | 0F | 1111 | Didžiausia 4 bitų (Nibble) reikšmė |
| 16 | 10 | 0001 0000 | |
| 127 | 7F | 0111 1111 | Maksimali pasirašyto 8 bitų (char) reikšmė |
| 255 | FF | 1111 1111 | Maksimali nepasirašyto 8 bitų (baito) reikšmė |
| 65 535 | FFFF | … | Maksimali 16 bitų reikšmė |
Dažniausiai užduodami klausimai (DUK)
Ką reiškia „Bit Depth“ (Bitų gylis)?
Nurodo, kiek atminties yra skirta skaičiui.- 8-bitų: Reikšmės nuo 0 iki 255 (arba nuo -128 iki 127). Atitinka
chararbabytetipą. - 16-bitų: Reikšmės iki 65 535. Atitinka
shorttipą. - 32-bitų: Standartinis
intšiuolaikinėse kalbose. - 64-bitų: Labai dideliems skaičiams (
long long,BigInt).
Kodėl skaičius 255 HEX formatu rašomas kaip FF?
Šešioliktainė sistema turi 16 skaitmenų (0-9 ir A-F), kur F reikšmė yra 15. SkaičiusFF apskaičiuojamas taip: $(15 \times 16^1) + (15 \times 16^0) = 240 + 15 = 255$.
Kaip konvertuoti HEX spalvą į RGB?
Interneto spalva, pvz.,#E05412, susideda iš trijų baitų: Raudona (E0), Žalia (54), Mėlyna (12).
Įveskite į mūsų keitiklio HEX laukelį "E0" -> gausite 224.
Įveskite "54" -> gausite 84.
Įveskite "12" -> gausite 18.
Rezultatas yra rgb(224, 84, 18).
Ką reiškia priešdėlis 0x, 0b arba 0o?
Kad programuotojai atskirtų skaičių sistemas, naudojami priešdėliai:0x= Šešioliktainė (pvz., 0xFF)0b= Dvejetainė (pvz., 0b101)0o= Aštuntainė (pvz., 0o755)
Kodėl mano laukelis paraudo?
Tai įvesties patvirtinimo funkcija. Tai reiškia, kad įvedėte simbolį, kuris nepriklauso tai skaičių sistemai. Pavyzdžiui:- Raidė "G" į HEX (leidžiama tik A-F).
- Skaitmuo "2" į BIN (leidžiama tik 0 ir 1).
- Skaitmuo "8" į OCT (leidžiama tik 0-7).