Wat ass wat? · bei.pm
>An dëser Rubrik fënnt een Artikelen iwwer Dateiformater an Reverse Engineering.
Aber elo ass et sou:
Ech ginn et dobaussen vill Programmiersprachen an vill Leit, déi e puer Saachen ënnert völlig aneren Nimm kennen - oder souguer keng Ahnung vun der Existenz vun den elementarsten Saachen hunn, well hir Programmiersprooch dat vun hinnen ofstrahéiert.
tl;dr:
Eng meng Notatioun orientéiert sech ännerlech un C99 <stdint.h>
. Wéi een mat dëser Notatioun eppes ufänke kann, wäert een mat menger Notatioun sécher kloer kommen.
Integer
Integer sinn einfach gesot ganz Zuelen, also Zuelen ouni Dezimaldeel.
D'Integer sinn an de meiste Fäll an Datenformaten an engem festem Zuelenbereich, quasi enger Resolutioun, definéiert. Ech ginn dës an Bit un - fir den Grund, datt e "Byte" an déi dovunner ofgeleit Typen (Word, Qword, ...) an der Regel plattformofhängig sinn.
Zousätzlech ënnerscheedt een bei Integer-Typen och tëscht natierleche Zuelen (ℕ, also ouni Vorzeichen - Unsigned) an ganze Zuelen (ℤ, also mat Vorzeichen - Signed).
D'Informatioun ass iwwer e Vorzeichen am Bezeechner (u
oder s
) ze gesin.
Dabei ass et méiglech, datt vorzeichenbehaftete ganz Zuelen entweder als Einerkomplement oder als Zweierkomplement ugewisen ginn.
Solang et net soss uginn ass, gëtt d'Zweierkomplement benotzt, well et an der moderner Informatik d'bevorzugt Darstellungen ass.
Vorzeichenlos Zuelen ginn vun mir an meinen Dokumentatiounen als uint
ugewisen, mat der folgender Angabe vun der Geneenheet an Bits.
Vorzeichenbehaftete Zuelen ginn vun mir an meinen Dokumentatiounen als sint
ugewisen, och mat der folgender Angabe vun der Geneenheet an Bits.
Ech verzichten op d'Benotzung vum Datentyp "char" fir Zeechen, well Zeechenketten an der Regel nëmmen Integer-Wäerterketten mat enger spezieller Interpretatioun representéieren.
Déi ginn dofir als uint(8)[] ugewisen.
Beispiller:
Notation | C99 stdint.h -Äquivalent |
Beschreiwung | Zuelenraum |
---|---|---|---|
uint(16) | uint16_t | Unsigned Integer, 16 Bit Längt | 0 - 65.535 |
sint(8) | int8_t | Signed Integer, 8 Bit Längt, Zweierkomplement | -126 - 127 |
uint(24) | uint32_t:24 | Unsigned Integer, 24 Bit Längt | 0 - 16.777.216 |
Festkomma-Wäerter
Festkomma-Zuelen sinn Zuelen aus dem Spektrum vun den rationalen Zuelen (Q), déi also iwwer e Komma an Nachkomma-Stellen verfüge.
Bei Festkomma-Zuelen ass - dofir och den Numm - d'Positioun vum Komma duerch den Datentyp fest definéiert.
Dadurch entsprécht och e feste Zuelenberäich fir Zuelen dësen Datentyp; mathematesch ausgedréckt ass de Zuelenraum fënnegt.
In der Realitéit gëtt dësen Datentyp haaptsächlech op Plattformen benotzt, déi net genuch séier Flësskomma-Hardware hunn, well d'Berechnung vun Festkomma-Zuelen duerch Integer-Einheiten ka geschéien.
Ech benotzen dësen Datentyp och zum Beispill an Datenbank-Management-Systemer, wann feste Foderungen erfëllt mussen.
Déi meescht Währungen beschränken sech op 2 Stellen no dem Komma, wat d'Iddi vun Systeme fir d'konstante Spueren vun Finanzdaten illustréiert.
(Ech sinn awer net sécher, ob et klug ass, hei Festkomma-Zuelen ze benotzen; et ass méi schlëss, direkt déi kleinste Währungs-Einheit als Integer ze späicheren an de Rescht der Darstellungs-Ebene ze iwwerloossen)
Analog zu den Integer-Angaben, gi ech bei Festkomma-Zuelen d'Aufléisung vun der Zuel vir an nom dem Komma an:
ufixed(9,7)
bezitt sech op einen Datentyp, deen 9 Bit fir den Wert virum Komma an 7 Bit fir den Wert nom Komma reservéiert; insgesamt ass et also 16 Bit breet an kann als Vektor vun zwee onofhängege Integers e Beräich vun (0,0) bis (511,127) ofdecken.
Dës Interpretatioun géif awer an hirer Dezimaldarstellung 28 Zuelen onbenotzt verléieren, well een sech méiglecherweis méi op maximal (511,99) an der Praxis beschränken géif.
Statt enger direkter Interpretatioun vum Festkomma-Wert als Vektor aus 2 separate Integers - wat quasi ëmmer e onbenotzte Beräich bei der Ëmwandlung an Dezimalzuelen an e manuell Transfer bedeit - kann de Nachkomma-Bereich och als Bruch vun hirer ganzer Aufléisung interpretéiert ginn.
Am Beispill vum genannte ufixed(9,7)
entsprécht dat engem Bruch iwwer e Nenner vun 27 - de Zuelenberäich geet dann vun 0,00 bis 511 + 126⁄127
Fir d'Ëmwandlung an eng Dezimaldarstellung muss d'Nachkomma-Stell also duerch 128 gedeelt ginn.
Mat dëser Variante kënne méi einfach Rechnungs-Operatiounen duerchgefouert ginn, well de Transfer automatesch geschitt, wat dës Variante am Allgemengen bevorzugt mécht.
Dës Variante huet awer den Nodeel, dass d'Nachkommastellen an der Dezimaldarstellung net méi iwwer eng garantéiert Aufléisung verfügen, eng eenzel Dezimalstell ass also net méi den Géigewert 0.01
, mä 0.007874
, wat zu entspriechenden Ronnungsfeeler féiere wäert.
Welch Interpretatiounsweis benotzt gëtt, gëtt entspriechend un der Verwendungsplaz dokumentéiert.
Fléisskomma- respektiv Gleitkomma-Wäerter
Fléisskomm-Wäerter sinn mathematesch méi komplex Ausdréck, bei deenen eng ganz Zuel mat fester Resolutioun iwwer eng mathematesch Formel esou ausgedrückt gëtt, dass effektiv de Nummertail duerch Verschiebung gebildet gëtt - an sech domat direkt un der wëssenschaftlecher Notatioun orientéiert.
Die gebräuchlechste Manéier, dëst ëmzesetzen, gouf mat
IEEE 754 standardiséiert an ass zënterhier international unerkannt.
Dabei besteet e Fléisskomm-Wäert normalerweis aus de folgende Komponente:
Virzeen (0 oder 1 ) |
Exponent | Mantisse |
Während d'Virzeen als binär Ja/Nein-Informatioun einfach erschloss ka ginn, formt sech d'Zuel selwer iwwer d'Gleechung
Mantisse * 2Exponent
Zousätzlech gëtt et nach eng Rei konstanter Wäerter, déi speziell Fäll rationaler Zuelen ofdeckt - dorënner ±∞
an NaN
("kee gültege Wäert").
Fléisskomm-Wäerter sinn virun allem nëtzlech, wann d'Genauheet net esou wichteg ass, well et bei dëser Aart vun Wäerter zwangsleefeg zu Rundungsfeeler an also Genauheetverloschter kënnt. Typesch ginn Fléisskomm-Wäerter dofir zum Beispill zur Definitioun vun Koordinaten, wéi Vertex-Vektoren an 3D-Modeler oder Bézier-/Spline-Kurven fir optesch Representatiouns-Zwecker gebraucht.
An den Datenformater ginn Fléisskomm-Wäerter als float(Mantisse, Exponent)
spezifiziert.
Wann e Format benotzt gëtt, dat vum IEEE 754 ofwäicht, gëtt dëst entspriechend uginn.