Ano ang ano? · bei.pm
Sa seksyon na ito, may mga artikulo tungkol sa mga format ng file at reverse engineering.
Ngayong nasa ganitong sitwasyon:
Maraming mga wika sa pagprograma sa labas at maraming tao ang may ibang tawag sa ilang bagay - o kaya'y wala talagang ideya tungkol sa pagkakaroon ng mga pinakapayak na bagay dahil iniiwasan ito ng kanilang wika sa pagprograma.
tl;dr:
Ang aking notasyon ay batay sa C99 <stdint.h>
. Ang sinumang nakakaunawa sa notasyong ito ay tiyak na makakaintindi sa aking notasyon.
Integer
Integer ay simpleng sinasabi na mga buong numero, o mga numerong walang bahagi ng desimal.
Ang mga Integer ay karaniwang tinutukoy sa mga format ng data sa loob ng isang nakatakdang saklaw ng numero, o sa madaling salita, isang resolusyon. Ipinapahayag ko ito sa Bit - dahil ang isang "Byte" at mga uri na nakabatay dito (Word, Qword, ...) ay karaniwang nakadepende sa platform.
Kabilang dito, ang mga uri ng Integer ay nahahati sa natural na mga numero (ℕ, o walang tanda - Unsigned) at buong mga numero (ℤ, o may tanda - Signed).
Ang impormasyong ito ay makikita sa isang tanda sa tagapagpahiwatig (u
o s
).
Posible na ang may tanda na mga buong numero ay maaaring ipakita bilang Einerkomplement o bilang Zweierkomplement.
Hanggang sa may ibang nakasaad, ang Zweierkomplement ang ginagamit, dahil ito ang pinakaprefer na representasyon sa modernong informatik.
Ang mga walang tanda na numero ay inilalarawan ko sa aking mga dokumentasyon bilang uint
, na may kasunod na pagtukoy ng katumpakan sa Bits.
Ang mga may tanda na numero ay inilalarawan ko sa aking mga dokumentasyon bilang sint
, pati na rin sa kasunod na pagtukoy ng katumpakan sa Bits.
Hindi ko ginagamit ang uri ng data na "char" para sa mga karakter, dahil ang mga string ay karaniwang naglalaman lamang ng mga integer na halaga na may espesyal na interpretasyon.
Kaya't ito ay inilalarawan bilang uint(8)[].
Mga halimbawa:
Notasyon | C99 stdint.h -Katumbas |
Paglalarawan | Hanay ng mga Numero |
---|---|---|---|
uint(16) | uint16_t | Unsigned Integer, 16 Bit na Haba | 0 - 65.535 |
sint(8) | int8_t | Signed Integer, 8 Bit na Haba, Dalawang Komplemento | -126 - 127 |
uint(24) | uint32_t:24 | Unsigned Integer, 24 Bit na Haba | 0 - 16.777.216 |
Mga Halagang Fixed Point
Mga halagang fixed-point ay mga numerong halaga mula sa spektrum ng Mga Rasyonal na Numero (Q), na sa gayon ay may koma at mga decimal na lugar.
Para sa mga halagang fixed-point, ang posisyon ng koma ay mahigpit na tinutukoy ng uri ng data - kaya nga ito ang pangalan.
Dahil dito, nagreresulta ito sa isang tiyak na saklaw ng mga numero para sa mga numerong ito; sa matematikal na pahayag, ang saklaw ng mga numero ay pangalagaan.
Sa realidad, ang uri ng data na ito ay pangunahing ginagamit sa mga platform na walang sapat na mabilis na yunit ng floating-point hardware, dahil ang pagkalkula ng mga halagang fixed-point ay maaaring gawin sa pamamagitan ng mga integer na yunit.
Ginagamit din ang uri ng data na ito, halimbawa, ng mga sistema ng pamamahala ng database kapag kinakailangan ang mga tiyak na kinakailangan.
Mag-isip tayo, halimbawa, ng mga sistema para sa permanenteng pag-iimbak ng mga datos sa pananalapi; ang karamihan ng mga pera ay limitado sa 2 decimal na lugar pagkatapos ng koma.
(Mas mabuti rin, hindi ito matalino na gumamit ng mga fixed-point na halaga para dito; mas matalino na direktang iimbak ang maliit na yunit ng pera bilang integer at iwanan ang natitirang bahagi ng antas ng representasyon)
Katulad ng mga integer na pahayag, ibinibigay ko ang resolusyon ng numero bago at pagkatapos ng koma para sa mga halagang fixed-point:
ufixed(9,7)
ay tumutukoy sa isang uri ng data na walang sign na nagreserba ng 9 bit para sa halaga bago ang koma, at 7 bit para sa halaga pagkatapos ng koma; sa kabuuan, ito ay 16 bit ang lapad at maaaring saklawin ang isang hanay mula (0,0) hanggang (511,127) bilang isang vektor ng dalawang independenteng integer.
Ngunit ang interpretasyong ito ay mag-iiwan ng 28 na numero na hindi nagagamit sa kanilang decimal na representasyon, dahil malamang na mas limitado ang praktikal na saklaw sa (511,99).
Sa halip na isang direktang interpretasyon ng halaga ng fixed-point bilang isang vektor mula sa 2 magkakahiwalay na integer - na kadalasang nagreresulta sa hindi nagagamit na lugar ng data kapag ini-convert sa mga decimal na numero at nangangailangan ng manu-manong paglipat - maaari ring i-interpret ang bahagi pagkatapos ng koma bilang fraction ng kabuuang resolusyon.
Sa halimbawa ng nabanggit na ufixed(9,7)
, nagreresulta ito sa isang fraction gamit ang denominator na 27 - ang saklaw ng mga numero ay mula 0,00 hanggang 511 + 126⁄127
Para sa conversion sa decimal na representasyon, ang decimal na bahagi ay dapat hatiin sa 128.
Gamit ang variant na ito, mas madali ang paggawa ng mga operasyon sa pagkalkula, dahil ang paglipat ay awtomatikong nagreresulta, kaya ito ay kadalasang pinapaboran.
Ngunit ang variant na ito ay may disbentaha na ang mga decimal na lugar sa decimal na representasyon ay wala nang garantisadong resolusyon, kaya ang isang decimal na lugar ay hindi na naglalaman ng katumbas na halaga 0.01
, kundi 0.007874
, na magdudulot ng mga kaukulang rounding errors.
Anuman ang paraan ng interpretasyon na ginamit, ito ay nakadokumento sa lugar ng paggamit.
Mga Halagang May Floating Point o Gleitkomma
Mga halaga ng floating-point ay mga matematikal na mas kumplikadong pahayag, kung saan ang isang buo na bilang na may nakatakdang resolusyon ay ipinapahayag sa pamamagitan ng isang matematikal na termino, na epektibong ang bahagi pagkatapos ng decimal ay nabuo sa pamamagitan ng paglipat - at direktang nakatuon sa siyentipikong notasyon.
Ang pinaka-karaniwang paraan upang ipatupad ito ay na-standardize gamit ang
IEEE 754 at mula noon ay kinilala ng internasyonal.
Ang isang halaga ng floating-point ay karaniwang binubuo ng mga sumusunod na bahagi:
Palatandaan (0 o 1 ) |
Exponent | Mantissa |
Samantala, ang palatandaan ay maaaring madaling maunawaan bilang isang binary na Oo/Hindi na impormasyon, ang aktwal na bilang ay nabubuo sa pamamagitan ng equation
Mantissa * 2Exponent
Karagdagan pa, mayroong isang serye ng mga constant na halaga na sumasaklaw sa mga espesyal na kaso ng mga rasyonal na numero - kabilang dito ang ±∞
at NaN
("walang wastong bilang").
Ang mga halaga ng floating-point ay lubos na kapaki-pakinabang kapag hindi gaanong mahalaga ang katumpakan, dahil sa ganitong uri ng mga halaga ay hindi maiiwasang nagkakaroon ng mga error sa pag-ikot at sa gayon ay nawawalan ng katumpakan. Kadalasan, ang mga halaga ng floating-point ay ginagamit halimbawa sa pagtukoy ng mga koordinado, tulad ng mga vertex vector sa 3D na mga modelo o Bézier/Spline curves para sa mga layuning optical na representasyon.
Sa mga format ng data, ang mga halaga ng floating-point ay tinutukoy bilang float(Mantissa, Exponent)
.
Kung ang isang format na hindi sumusunod sa IEEE 754 ay ginagamit, ito ay nakasaad nang naaayon.