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ą:

  1. Reaktyvumas realiuoju laiku: Jokio mygtuko „Skaičiuoti“. Pradėkite rašyti į HEX laukelį ir iškart matysite, kaip keičiasi BIN ir DEC.
  2. 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ą.
  3. Dvejetainio kodo skaitomumas: Žiūrėti į 1110101011011110 yra 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.
  4. 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).

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 755 nustato 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:

  1. Nustatykite gylį į 8-bitų.

    • Įveskite į DEC: -5.
    • HEX rezultatas: FB.
    • BIN rezultatas: 1111 1011.
    • Paaiškinimas: $256 - 5 = 251$ (kas yra FB).
  2. Nustatykite gylį į 16-bitų.

    • Įveskite į DEC: -5.
    • HEX rezultatas: FFFB.
    • Paaiškinimas: Kadangi turime daugiau vietos, „vienetai“ užpildo likusią erdvę kairėje.
  3. Nustatykite gylį į Tik teigiami (Unsigned).

    • Jei įvesite -5, laukelis paraus. Šis režimas nepalaiko neigiamų skaičių, nes tam reikėtų begalybės vienetų.

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
0000000Nulis
1010001
100A1010
150F1111Didžiausia 4 bitų (Nibble) reikšmė
16100001 0000
1277F0111 1111Maksimali pasirašyto 8 bitų (char) reikšmė
255FF1111 1111Maksimali nepasirašyto 8 bitų (baito) reikšmė
65 535FFFFMaksimali 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 char arba byte tipą.
  • 16-bitų: Reikšmės iki 65 535. Atitinka short tipą.
  • 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čius FF 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)
Mūsų keitiklis atpažįsta šiuos žymėjimus, tačiau jų rašyti nebūtina.
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).
Ištaisykite klaidą ir skaičiavimas tęsis.