Nini ni nini? · bei.pm
Katika sehemu hii kuna makala kuhusu mifumo ya faili na uhandisi wa kurudi.
Sasa, hali iko hivi:
Kuna lugha nyingi za programu na watu wengi ambao wanajua vitu fulani kwa majina tofauti kabisa - au hawana habari hata kidogo kuhusu uwepo wa mambo ya msingi, kwa sababu lugha yao ya programu inawafanya walau kuondoa dhana hizo.
tl;dr:
Mifumo yangu ya kuandika inategemea kwa kiasi fulani C99 <stdint.h>
. Yeyote anayeweza kuelewa mfumo huu wa kuandika, atakuwa na urahisi na mfumo wangu.
Integer
Integer ni kwa kifupi nambari nzima, yaani nambari zisizo na sehemu ya desimali.
Hapa, Integer katika fomati za data kwa ujumla zinamuwazi ndani ya wigo fulani wa nambari, kama vile ufafanuzi. Hii ninaelezea kwa Bit - kwa sababu, "Byte" na aina zinazotokana na hiyo (Word, Qword, ...) kwa ujumla zinategemea jukwaa.
Vilevile, tunatofautisha kati ya aina za Integer kwa nambari za asili (ℕ, yaani, zisizo na ishara - Unsigned) na nambari nzima (ℤ, yaani, zikiwa na ishara - Signed).
Taarifa hii inaonekana kupitia ishara katika kiashiria (u
au s
).
Hapa inawezekana kwamba nambari zenye ishara zinaweza kuwakilishwa kama Einerkomplement au kama Zweierkomplement.
Kama hakuna vinginevyo vilivyoainishwa, Zweierkomplement inatumika, kwani ni njia inayopendekezwa katika sayansi ya kompyuta ya kisasa.
Nambari zisizo na ishara zinaoneshwa na mimi katika nyaraka zangu kama uint
, pamoja na uelekezaji wa usahihi katika Bits.
Nambari zenye ishara zinaoneshwa na mimi katika nyaraka zangu kama sint
, pia na uelekezaji wa usahihi katika Bits.
Ninakataa kutumia aina ya data "char" kwa herufi, kwani mfuatano wa herufi kwa ujumla unawakilisha tu mfuatano wa thamani za Integer kwa tafsiri maalum.
Hizi zitatambulishwa kama uint(8)[].
Mifano:
Hali | C99 stdint.h -sawa |
Maelezo | Uwanja wa Nambari |
---|---|---|---|
uint(16) | uint16_t | Nambari isiyo na ishara, urefu wa Bit 16 | 0 - 65.535 |
sint(8) | int8_t | Nambari yenye ishara, urefu wa Bit 8, nyongeza ya mbili | -126 - 127 |
uint(24) | uint32_t:24 | Nambari isiyo na ishara, urefu wa Bit 24 | 0 - 16.777.216 |
Thamani za desimali za kudumu
Thamani za Festkomma ni thamani za namba kutoka kwenye wigo wa Nambari za Kimaadili (Q), ambazo kwa hivyo zina komma pamoja na nambari za baada ya koma.
Kwa thamani za Festkomma - hivyo ndivyo jina lilivyo - nafasi ya koma imewekwa kwa ukamilifu na aina ya data.
Hii ina maana kwamba kuna eneo maalum la nambari kwa nambari za aina hii; kwa kusema kwa kiasi, eneo la nambari ni lililo na mipaka.
Katika hali halisi, aina hii ya data inatumiwa hasa kwenye majukwaa yasiyo na vifaa vya haraka vya kuhesabu nambari za desimali, kwani hesabu za thamani za Festkomma zinaweza kufanywa na vitengo vya Integer.
Pia aina hii ya data hutumiwa na mifumo ya usimamizi wa hifadhidata, wakati mahitaji ya kudumu yanapaswa kutimizwa.
Fikiria mifumo ya kuhifadhi data za fedha kwa muda mrefu; fedha nyingi zina mipaka ya nambari 2 baada ya koma.
(Lakini si busara kutumia thamani za Festkomma kwa hili; ni bora kuhifadhi moja kwa moja kitengo kidogo zaidi cha fedha kama Integer na kuacha sehemu nyingine ya kuwasilisha).
Kama ilivyo kwa maelezo ya Integer, natoa ufafanuzi wa nambari ya Festkomma kabla na baada ya koma:
ufixed(9,7)
inamaanisha aina ya data isiyo na ishara ya kuhifadhi bit 9 kwa thamani kabla ya koma, pamoja na bit 7 kwa thamani baada ya koma; kwa hivyo ni pana jumla ya bit 16 na inaweza, kwa mfano, kama vector ya Integer mbili zisizohusiana kufunika eneo kutoka (0,0) hadi (511,127).
Tafsiri hii ingekuwa ikitupa nambari 28 bila matumizi katika uwakilishi wake wa desimali, kwani labda tungejikita zaidi kwenye (511,99) katika mazoezi.
Pale ambapo kuna ufafanuzi wa moja kwa moja wa thamani ya Festkomma kama vector ya Integer mbili tofauti - ambayo mara nyingi huleta eneo la data ambalo halitumiki wakati wa kubadilisha kuwa nambari za desimali na uhamishaji wa mikono - inaweza pia kutafsiriwa kuwa eneo la nambari za baada ya koma kama sehemu ya ufumbuzi wake wote.
Kwa mfano wa ufixed(9,7)
iliyotajwa, inapata sehemu juu ya mdenyo wa 27 - eneo la nambari linakuwa kutoka 0,00 hadi 511 + 126⁄127
Kwa kubadilisha kuwa uwakilishi wa desimali, sehemu ya baada ya koma itapaswa kugawanywa kwa 128.
Kwa variant hii, shughuli za hisabati zinaweza kufanywa kwa urahisi zaidi, kwani uhamishaji unapatikana kiotomatiki, kwa hivyo variant hii kwa kawaida inapendelea.
Hata hivyo, variant hii ina kasoro kwamba sehemu za baada ya koma katika uwakilishi wa desimali hazina uhakika wa ufumbuzi, hivyo sehemu moja ya desimali haina tena thamani 0.01
, bali 0.007874
, ambayo inaweza kusababisha makosa ya kuzungusha.
Njia ipi ya tafsiri inayotumiwa itandikwa katika sehemu ya matumizi.
Thamani za koma au thamani za kuunganishwa
Nambari za mantissa ni matumizi ya kisayansi yenye ngumu zaidi, ambapo nambari nzima yenye azimio thabiti inawakilishwa kupitia neno la kisayansi kwa njia ambayo sehemu ya desimali inaundwa kwa kuhamasisha - na hivyo kujiunga moja kwa moja na uandishi wa kisayansi.
Njia inayotumika zaidi kutekeleza hii imewekwa kwa kiwango cha
IEEE 754 na tangu wakati huo kutambuliwa kimataifa.
Kawaida, nambari ya mantissa inajumuisha vipengele vifuatavyo:
Alama (0 au 1 ) |
Exponent | Mantissa |
Wakati alama inaweza kubainishwa kwa urahisi kama taarifa ya kibinari ya Ndiyo/Hapana, nambari halisi inaundwa kupitia formula
Mantissa * 2Exponent
Ziada, kuna safu ya thabiti nambari zinazoshughulikia hali maalum za nambari za mantissa - ikiwa ni pamoja na ±∞
na NaN
("nambari isiyo halali").
Nambari za mantissa ni muhimu hasa wakati usahihi si wa umuhimu sana, kwani kwa aina hii ya nambari kuna makosa ya mzunguko na hivyo kupoteza usahihi. Kawaida, nambari za mantissa hutumika kwa mfano katika ufafanuzi wa maelezo, kama vile vigezo vya vertex katika mifano ya 3D au mikondo ya Bézier/Spline kwa madhumuni ya uwakilishi wa kuona.
Katika mifumo ya data, nambari za mantissa zinaelezwa kama float(Mantissa, Exponent)
.
Iwapo mfumo unaotumiwa unakosea na IEEE 754, basi hii itaonyeshwa ipasavyo.