Hvad er hvad? · bei.pm

Denne tekst blev automatiseret oversat af OpenAI GPT-4o Mini

I denne sektion er der artikler om filformater og reverse engineering.

Men sådan er det:
Der findes mange programmeringssprog derude, og mange mennesker kender nogle ting under helt andre navne - eller har slet ingen idé om eksistensen af de mest grundlæggende ting, fordi deres programmeringssprog abstraherer det væk fra dem.

tl;dr:
Min notation er groft baseret på C99 <stdint.h>. Den, der kan arbejde med denne notation, vil helt sikkert kunne forstå min notation.

Hel tal

Integer er kort sagt heltal, altså tal uden decimaler.

Integer er i datatyper normalt defineret inden for et fast talområde, så at sige en opløsning. Jeg angiver dette i bit - fordi et "byte" og deraf følgende typer (Word, Qword, ...) typisk er platformafhængige.

Derudover skelner man også mellem naturlige tal (ℕ, altså uden fortegn - Unsigned) og hele tal (ℤ, altså med fortegn - Signed).
Denne information fremgår af et fortegn i betegnelse (u eller s).

Det er muligt, at fortegnsbeholdte heltal enten kan repræsenteres som Einerkomplement eller som Zweierkomplement.
Medmindre andet er angivet, anvendes Zweierkomplement, da det er den foretrukne repræsentation i moderne datalogi.

Uden fortegn tal angiver jeg i mine dokumenter som uint, efterfulgt af angivelsen af præcision i Bits.
Fortegnsbeholdte tal angiver jeg i mine dokumenter som sint, ligeledes efterfulgt af angivelsen af præcision i Bits.

Jeg undgår at bruge datatypen "char" til tegn, da strengene normalt kun repræsenterer kæder af Integer-værdier med en særlig fortolkning.
Disse repræsenteres derfor som uint(8)[].

Eksempler:

Notation C99 stdint.h-ækvivalent Beskrivelse Talområde
uint(16) uint16_t Unsigned Integer, 16 Bit længde 0 - 65.535
sint(8) int8_t Signed Integer, 8 Bit længde, to-komplement -126 - 127
uint(24) uint32_t:24 Unsigned Integer, 24 Bit længde 0 - 16.777.216

Festkomma-værdier

Fast-komma-værdier er talværdier fra spektret af rationelle tal (Q), som derfor har et komma samt decimaler.

Med fast-komma-værdier er - derfor også navnet - positionen af ​​kommaet fastsat af datatypen.
Dette resulterer også i et fast talområde for tal af denne datatype; matematisk udtrykt er talrummet ændeligt.

I virkeligheden anvendes denne datatype primært på platforme uden tilstrækkeligt hurtige flydende kommatilstandsenheder, da beregningen af ​​fast-komma-værdier kan udføres af heltalsenheder.

Desuden anvendes datatypen for eksempel af databaseadministrationssystemer, når faste krav skal opfyldes.
Tænk her for eksempel på systemer til permanent opbevaring af finansdata; de fleste valutaer begrænser sig til 2 decimaler. (Det er dog ikke klogt at bruge fast-komma-værdier til dette; det er smartere at gemme den mindste valutaenhed som heltal og overlade resten til præsentationsniveauet)

Analogt til heltalsangivelser angiver jeg for fast-komma-værdier opløsningen af ​​tallet før og efter kommaet:
ufixed(9,7) betegner en datatype, der uden fortegn reserverer 9 bit til værdien før kommaet og 7 bit til værdien efter kommaet; i alt altså 16 bit bred og kan således som en vektor af to uafhængige heltal dække et område fra (0,0) til (511,127).
Denne fortolkning ville dog i sin decimalrepræsentation spilde 28 tal, da man sandsynligvis ville begrænse sig til maksimalt (511,99) i praksis.

I stedet for en direkte fortolkning af fast-komma-værdien som en vektor af 2 separate heltal - hvilket næsten altid betyder et ubenyttet dataområde ved konvertering til decimaler og en manuel overførsel - kan decimalområdet i stedet fortolkes som brøk af deres samlede opløsning.
Med eksemplet på den lige nævnte ufixed(9,7) resulterer dette i en brøk med en nævner på 27 - talområdet går så fra 0,00 til 511 + 126127 Til konvertering til en decimalrepræsentation skal decimalen derfor deles med 128.
Med denne variant kan beregningsoperationer udføres lettere, da overførslen sker automatisk, hvilket gør denne variant i de fleste tilfælde foretrukket.
Denne variant har dog den ulempe, at decimalerne i decimalrepræsentationen ikke længere har en garanteret opløsning, så en enkelt decimal ikke længere svarer til værdien 0.01, men 0.007874, hvilket vil føre til tilsvarende afrundingsfejl.

Hvilken fortolkningsmetode der anvendes, dokumenteres passende ved anvendelsesstedet.

Flydende- eller glidende komma-værdier

Flydende komma-værdier er matematiske komplekse udtryk, hvor et helt tal med fast opløsning udtrykkes gennem et matematisk udtryk, så den effektive decimaldel dannes ved forskydning - og dermed er direkte relateret til videnskabelig notation.
Den mest almindelige måde at implementere dette på er standardiseret med IEEE 754 og er blevet internationalt anerkendt siden da.

En flydende komma-værdi består typisk af følgende komponenter:

Fortegn (0 eller 1) Eksponent Mantisse

Mens fortegnet som binær ja/nej-information kan udledes enkelt, dannes det egentlige tal gennem ligningen
Mantisse * 2Eksponent

Derudover findes der en række konstante værdier, der dækker særlige tilfælde af rationelle tal - herunder ±∞ og NaN ("ikke et gyldigt tal").

Flydende komma-værdier er især nyttige, når nøjagtigheden ikke er så vigtig, da denne type værdier nødvendigvis fører til afrundingsfejl og dermed tab af nøjagtighed. Typisk anvendes flydende komma-værdier derfor f.eks. til at definere koordinater, såsom vertex-vektorer i 3D-modeller eller Bézier-/Spline-kurver til optiske repræsentationsformål.

I dataformater specificeres flydende komma-værdier som float(Mantisse, Eksponent).
Hvis et format, der afviger fra IEEE 754, anvendes, angives dette tilsvarende.