Què és què? · bei.pm
En aquesta secció hi ha articles sobre formats de fitxer i enginyeria inversa.
Però ara és així:
Hi ha moltes llenguatges de programació allà fora i moltes persones que coneixen algunes coses amb noms completament diferents - o que no tenen idea de l'existència de les coses més fonamentals, perquè la seva llenguatge de programació les ha abstraccionat.
tl;dr:
La meva notació s'orienta aproximadament a C99 <stdint.h>
. Qui pugui entendre aquesta notació, segur que entendrà la meva.
Enter
Integer són, dit de manera senzilla, nombres enters, és a dir, nombres sense part decimal.
Així, els integers en formats de dades solen estar definits dins d'un rang numèric fix, quasi com una resolució. Això ho dono en bits - per això, un "byte" i tipus derivats (Word, Qword, ...) solen ser dependents de la plataforma.
A més, es distingeix entre tipus d'Integer que poden ser nombres naturals (ℕ, és a dir, sense signe - Unsigned) i nombres enters (ℤ, és a dir, amb signe - Signed).
Aquesta informació és visible a través d'un signe en el nom (u
o s
).
És possible que els nombres enters amb signe es representin com a complement a un o com a complement a dos.
Senzillament, si no s'indica el contrari, s'utilitza el complement a dos, ja que és la representació preferida en la informàtica moderna.
Els nombres sense signe es documenten com a uint
, amb l'especificació de la precisió en bits.
Els nombres amb signe es documenten com a sint
, també amb l'especificació de la precisió en bits.
No utilitzo el tipus de dada "char" per a caràcters, ja que les cadenes de caràcters solen representar només cadenes de valors enters amb una interpretació especial.
Això es representarà com a uint(8)[].
Exemples:
Notació | Equivalència C99 stdint.h |
Descripció | Rang numèric |
---|---|---|---|
uint(16) | uint16_t | Sencer sense signe, longitud de 16 bits | 0 - 65.535 |
sint(8) | int8_t | Sencer signat, longitud de 8 bits, complement a dos | -126 - 127 |
uint(24) | uint32_t:24 | Sencer sense signe, longitud de 24 bits | 0 - 16.777.216 |
Valors de festcomma
Valors de punt fix són valors numèrics de l'espectre dels Nombres Racionals (Q), que per tant disposen d'una coma així com de digits decimals.
En els valors de punt fix, la posició de la coma està, com indica el nom, fixada pel tipus de dada.
Això resulta en un rang numèric definit per a valors d'aquest tipus de dada; matemàticament parlant, l'espai numèric és finít.
En la realitat, aquest tipus de dada s'utilitza principalment en plataformes sense una unitat de hardware de coma flotant prou ràpida, ja que el càlcul de valors de punt fix es pot realitzar mitjançant unitats d'enter.
Aquest tipus de dada també és utilitzat, per exemple, per sistemes de gestió de bases de dades quan s'han de complir requisits fixos.
Pensem aquí, per exemple, en sistemes per emmagatzemar de manera permanent dades financeres; la majoria de les monedes es limiten a 2 decimals.
(No és prudent utilitzar valors de punt fix per a això; és més intel·ligent emmagatzemar directament la petita unitat monetària com un enter i deixar la resta a la capa de representació).
De manera anàloga a les especificacions d'enters, en els valors de punt fix indico la resolució del nombre abans i després de la coma:
ufixed(9,7)
designa un tipus de dada que reserva 9 bits sense signe per al valor abans de la coma, així com 7 bits per al valor després de la coma; en total, és a dir, 16 bits d'amplada i així, per exemple, pot cobrir un rang de (0,0) fins a (511,127) com a vector de dos enters independents.
Tanmateix, aquesta interpretació deixaria 28 nombres sense utilitzar en la seva representació decimal, ja que probablement ens limitaríem a un màxim de (511,99) en la pràctica.
En comptes d'una interpretació directa del valor de punt fix com un vector de 2 enters separats - cosa que pràcticament sempre implica un espai de dades no utilitzat en la conversió a nombres decimals i una transferència manual - el rang decimal es pot interpretar com un fracció de la seva resolució total.
En l'exemple del mencionat ufixed(9,7)
, resulta així una fracció amb un denominador de 27 - el rang de nombres va de 0,00 a 511 + 126⁄127
Per a la conversió a una representació decimal, el decimal hauria de ser dividit per 128.
Aquesta variant permet realitzar operacions aritmètiques més fàcilment, ja que la transferència es produeix automàticament, cosa que fa que aquesta variant sigui preferida en la majoria dels casos.
Aquesta variant, tanmateix, té el desavantatge que els decimals en la representació decimal ja no disposen d'una resolució garantida, per tant, un sol decimal ja no equival a 0.01
, sinó a 0.007874
, cosa que provocarà errors d'arrodoniment corresponents.
Quina manera d'interpretar s'utilitza es documenta a la seva corresponent ubicació d'ús.
Valors de punt flotant o de coma flotant
Els valors de punt flotant són expressions matemàticament més complexes, en què un nombre enter amb una resolució fixa es representa mitjançant un terme matemàtic de manera que, efectivament, la part decimal es forma per desplaçament - i així s'orienta immediatament a la notació científica.
La manera més habitual de dur a terme això es va standarditzar amb
IEEE 754 i és reconeguda internacionalment des de llavors.
En general, un valor de punt flotant consta de les següents components:
Signe (0 o 1 ) |
Exponent | Mantissa |
Mentre que el signe es pot deduir fàcilment com a informació binària de Sí/No, el nombre real es forma a través de l'equació
Mantissa * 2Exponent
A més, hi ha una sèrie de valors constants que cobreixen casos especials de nombres racionals - incloent ±∞
i NaN
("no és un nombre vàlid").
Els valors de punt flotant són especialment útils quan la precisió no és tan important, ja que en aquest tipus de valors inevitablement hi ha errors d'arrodoniment i, per tant, pèrdues de precisió. Típicament, els valors de punt flotant s'utilitzen, per exemple, per definir coordenades, com ara vectors de vèrtex en models 3D o corbes Bézier/Spline per a fins de representació visual.
En els formats de dades, els valors de punt flotant es specifiquen com a float(Mantissa, Exponent)
.
Si s'utilitza un format diferent d'IEEE 754, això s'indica corresponentment.