Kas yra kas? · bei.pm

Šis tekstas buvo automatiškai išverstas naudojant OpenAI GPT-4o Mini.

Šioje skiltyje yra straipsnių apie failų formatus ir atvirkštinį inžineriją.

Dabar yra taip:
Yra daug programavimo kalbų ir daug žmonių, kurie tam tikras dalykus žino visiškai kitais pavadinimais - arba neturi jokios supratimo apie pačių pagrindinių dalykų egzistavimą, nes jų programavimo kalba tai nuo jų atskiria.

tl;dr:
Mano notacija šiurkščiai remiasi C99 <stdint.h>. Kas nors supranta šią notaciją, tikrai susidoros ir su mano notacija.

Sveikasis skaičius

Sveikieji skaičiai paprastai yra visos skaičių be dešimtainės dalies.

Sveikieji skaičiai duomenų formatuose paprastai apibrėžiami tam tikrame skaičių spektre, tarsi rezoliucijoje. Šį spektro dydį nurodau bitais, nes "baitai" ir jais pagrįsti tipai (žodis, qword, ...) dažniausiai priklauso nuo platformos.

Taip pat sveikųjų skaičių tipuose dar skiriama natūraliems skaičiams (ℕ, t.y., be ženklų - Unsigned) ir sveikiesiems skaičiams (ℤ, t.y., su ženklais - Signed).
Tai informacija matoma pagal ženklo nurodymą identifikatoriuje (u arba s).

Yra galimybė, kad ženklinti sveikieji skaičiai gali būti pateikiami kaip vienetų komplementas arba kaip dvejetų komplementas.
Kai nenurodyta kitaip, naudojamas dvejetų komplementas, nes jis yra pageidautina reprezentacija šiuolaikinėje informatikos srityje.

Beženkli skaičiai mano dokumentacijoje pažymimi kaip uint, su vėlesniu tikslumo nurodymu bitais.
Ženklinti skaičiai mano dokumentacijoje pažymimi kaip sint, taip pat su vėlesniu tikslumo nurodymu bitais.

Aš atsisakau naudoti "char" tipo duomenis simboliams, nes simbolių eilutės paprastai yra tik sveikųjų skaičių sekos su specialiu interpretavimu.
Dėl to jos yra pateikiamos kaip uint(8)[].

Pavyzdžiai:

Žymėjimas C99 stdint.h-atitikmuo Aprašymas Skaitymo intervalas
uint(16) uint16_t Be ženklų sveikasis skaičius, 16 bitų ilgio 0 - 65.535
sint(8) int8_t Su ženklu sveikasis skaičius, 8 bitų ilgio, dvejetainis papildymas -126 - 127
uint(24) uint32_t:24 Be ženklų sveikasis skaičius, 24 bitų ilgio 0 - 16.777.216

Fiksuoto taško vertės

Fiksuoto taško reikšmės yra skaičių reikšmės iš racionalių skaičių (Q) spektro, todėl jie turi kable ir dešimtaines vietas.

Fiksuoto taško reikšmėse - todėl ir pavadinimas - kablio vieta yra nustatyta pagal duomenų tipą.
Dėl to taip pat gaunamas fiksuotas skaičių diapazonas šio duomenų tipo skaičiams; matematiškai tariant, skaičių erdvė yra baigtinė.

Iš tikrųjų šis duomenų tipas dažniausiai naudojamas platformose, neturinčiose pakankamai greitos kintamosios taško aparatinės įrangos, nes fiksuoto taško reikšmių skaičiavimas gali vykti naudojant sveikųjų skaičių vienetus.

Duomenų tipas taip pat naudojamas, pavyzdžiui, duomenų bazių valdymo sistemose, kai reikia atitikti fiksuotus reikalavimus.
Galima pagalvoti apie sistemas, skirtas ilgalaikiam finansinių duomenų saugojimui; dauguma valiutų apriboja iki 2 dešimtainių vietų. (Nepatartina naudoti fiksuoto taško reikšmių; protingiau tiesiog saugoti mažiausią valiutos vienetą kaip sveikąjį skaičių ir palikti likusią reprezentacijos dalį.)

Panašiai kaip ir sveikųjų skaičių nurodymuose, fiksuoto taško reikšmėse nurodau skaičiaus raišką prieš ir po kable:
ufixed(9,7) reiškia duomenų tipą, kuris be ženklų rezervuoja 9 bitus reikšmei prieš kable ir 7 bitus reikšmei po kable; bendrai tai yra 16 bitų pločio ir gali, pavyzdžiui, kaip dviejų nepriklausomų sveikųjų skaičių vektorius, apimti diapazoną nuo (0,0) iki (511,127).
Tačiau ši interpretacija savo dešimtainėje atvaizdavimo formoje neišnaudotų 28 skaičių, nes praktiškai greičiausiai apribotume iki (511,99).

Vietoj tiesioginės fiksuoto taško reikšmės interpretacijos kaip dviejų atskirų sveikųjų skaičių vektoriaus - kas beveik visada reiškia neišnaudotą duomenų erdvę konvertuojant į dešimtainius skaičius ir rankinį pervedimą - dešimtainės vietos gali būti interpretuojamos kaip lūžis visos jų raiškos.
Pavyzdžiui, ufixed(9,7) duoda lūžį su vardikliu 27 - skaičių diapazonas tada būtų nuo 0,00 iki 511 + 126127 Konvertuojant į dešimtainę atvaizdavimo formą, dešimtainė vieta turėtų būti padalyta iš 128.
Ši variacija leidžia lengviau atlikti skaičiavimo operacijas, nes pervedimas vyksta automatiškai, todėl ši variacija paprastai yra pageidaujama.
Tačiau šios variacijos trūkumas yra tas, kad dešimtainės vietos dešimtainėje atvaizdavimo formoje nebėra garantuotos raiškos, taigi, viena dešimtainė vieta nebebus lygi 0.01, bet 0.007874, kas gali sukelti atitinkamų apvalinimo klaidų.

Kuri interpretacija bus naudojama, bus atitinkamai dokumentuota naudojimo vietoje.

Plaukiojančio taško vertės

Slankieji skaičiai yra matematiškai sudėtingesni išraiškos, kuriose sveikasis skaičius su fiksuota rezoliucija išreiškiamas matematinėje formulėje taip, kad efektyviai dešimtainė dalis būtų suformuota perkeliant - ir taip tiesiogiai orientuojasi į mokslinę notaciją.
Dažniausias būdas tai įgyvendinti buvo standartizuotas su IEEE 754 ir nuo to laiko yra tarptautiniu mastu pripažintas.

Paprastai slankusis skaičius susideda iš šių komponentų:

Ženklas (0 arba 1) Eksponentas Mantisa

Tuo tarpu ženklas gali būti lengvai nustatomas kaip binarinė Taip/Ne informacija, o pati skaičius formuojama pagal lygtį
Mantisa * 2Eksponentas

Papildomai yra keletas konstantų, kurios apima ypatingus racionalių skaičių atvejus - įskaitant ±∞ ir NaN ("negaliojantis skaičius").

Slankieji skaičiai yra ypač naudingi, kai tikslumas nėra toks svarbus, nes šio tipo skaičiuose neišvengiamai atsiranda apvalinimo klaidų ir taip pat tikslumo praradimų. Įprastai slankieji skaičiai naudojami pavyzdžiui, koordinatėms apibrėžti, kaip viršūnių vektoriams 3D modeliuose ar Bézier/Spline kreivėms optinėms reprezentacijoms.

Duomenų formatuose slankieji skaičiai yra specifikuojami kaip float(Mantisa, Eksponentas).
Jei naudojamas formatas, kuris skiriasi nuo IEEE 754, tai bus atitinkamai nurodyta.