Kedu ihe bụ ihe? · bei.pm
N'isiokwu a, enwere edemede banyere ụdị faịlụ na Reverse Engineering.
Maka nke a:
Enwere ọtụtụ asụsụ mmemme n'èzí na ọtụtụ ndị mmadụ maara ụfọdụ ihe dị iche iche n'aha dị iche - ma ọ bụ ọbụna enweghị ihe ọmụma banyere ịnwe ihe ndị bụ isi, n'ihi na asụsụ mmemme ha na-ewepụ ha n'echiche.
tl;dr:
Ndụmọdụ m na-adabere na C99 <stdint.h>
. Onye nwere ike ịghọta ndụmọdụ a ga-enweta uru na ndụmọdụ m.
Integer
Integer bụ naanị ọnụ ọgụgụ zuru ezu, nke pụtara na ọ bụ ọnụ ọgụgụ na-enweghị akụkụ decimal.
Integer na ụdị data na-adịkarị n'ime oke nọmba kwụsiri ike, dịka otu nhazi. Ana m etinye nke a na Bit - n'ihi na "Byte" na ụdị ndị ọzọ dabere na ya (Word, Qword, ...) bụ nke dabere na ikpo okwu.
Otu a ka e si kewaa Integer n'etiti ọnụọgụgụ nwere nkwa (ℕ, nke pụtara, na-enweghị akara - Unsigned) na ọnụọgụgụ zuru ezu (ℤ, nke pụtara, nwere akara - Signed).
Nkwupụta a pụtara na enwere akara na ihe aha (u
ma ọ bụ s
).
Otu a ka enwere ike, na nke nwere akara ọnụ ọgụgụ zuru ezu nwere ike igosipụta dịka Einerkomplement ma ọ bụ dịka Zweierkomplement.
Ruo mgbe a na-ekwu ihe ọzọ, a na-eji Zweierkomplement eme ihe, n'ihi na ọ bụ ụdị e gosipụtara nke a na-ahọrọ na nkà na ụzụ oge a.
A na-egosi m ọnụ ọgụgụ na-enweghị akara na akwụkwọ m dịka uint
, na-esochi nkọwa nke ziri ezi na Bits.
A na-egosi m ọnụ ọgụgụ nwere akara na akwụkwọ m dịka sint
, na-esochi nkọwa nke ziri ezi na Bits.
Enweghị m iji ụdị data "char" maka mkpụrụedemede, n'ihi na mkpụrụedemede na-adịkarị naanị ọnụ ọgụgụ Integer na nkọwa pụrụ iche.
Nke a na-egosipụta ya dị ka uint(8)[].
Nke a bụ ihe atụ:
Njirimara | C99 stdint.h -nke yiri |
Nkowa | Ọnụ ọgụgụ |
---|---|---|---|
uint(16) | uint16_t | Unsigned Integer, ogologo 16 Bit | 0 - 65.535 |
sint(8) | int8_t | Signed Integer, ogologo 8 Bit, abụọ nkeji | -126 - 127 |
uint(24) | uint32_t:24 | Unsigned Integer, ogologo 24 Bit | 0 - 16.777.216 |
Uru Festkomma
Ọnụ ọgụgụ Festkomma bụ ọnụ ọgụgụ sitere na Ọnụ ọgụgụ Rationale (Q), nke pụtara na ha nwere komma na nkeji komma.
N'ịbụ Ọnụ ọgụgụ Festkomma, ọnọdụ nke komma bụ nke a na-ejikarị kwadoro site na ụdị data.
N'ihi nke a, e nwerekwa mpaghara ọnụ ọgụgụ kwụsiri ike maka ọnụ ọgụgụ nke ụdị data a; n'ụzọ mgbakọ na mwepụ, mpaghara ọnụ ọgụgụ ahụ bụ nkeji.
N'ezinụlọ, a na-ejikarị ụdị data a na ikpo okwu ndị na-enweghị ngwa ngwa zuru ezu nke hardware Fließkomma, n'ihi na mgbakọ nke Ọnụ ọgụgụ Festkomma nwere ike ịme site na Integer.
A na-ejikwa ụdị data a, dịka ọmụmaatụ, site na usoro njikwa data, mgbe ihe achọrọ kwesịrị ịdị mfe.
Ọ bụrụ na anyị tụlee usoro nke nchekwa ogologo oge nke data ego; ọtụtụ akụ na ụba na-akwụsị na 2 nkeji mgbe komma.
(Ọ bụ ezie na ọ bụghị ihe amamihe dị na ya iji were Ọnụ ọgụgụ Festkomma maka nke a; ihe ka mma bụ iji chekwaa nkeji akụ na ụba kacha nta dịka Integer ma hapụ ihe ndị ọzọ na ntinye)
Dịka nke a, n'ịbụ Integer, m na-enye nkwupụta nke ọnụ ọgụgụ n'elu na n'okpuru komma:
ufixed(9,7)
na-anọchite anya ụdị data nke na-enweghị akara na-echebe 9 Bit maka ọnụ ọgụgụ n'elu komma, yana 7 Bit maka ọnụ ọgụgụ n'okpuru komma; n'ozuzu, ọ bụ 16 Bit nke ukwuu ma nwee ike ịkpọkọta mpaghara (0,0) ruo (511,127) dịka Vektor nke Integer abụọ ndị na-enweghị njikọ.
Nke a ga-eme ka usoro a na-enyere 28 nọmba n'echiche nke decimal, n'ihi na mmadụ nwere ike ikwu na ha ga-eme ka ha bụrụ (511,99) n'ọrụ.
N'ikpeazụ, kama iji nke a rụọ ọrụ na Ọnụ ọgụgụ Festkomma dịka Vektor nke Integer abụọ - nke na-emekarị ka e nwee mpaghara data adịghị eji mgbe e gbanwere ya na nọmba decimal na nhọrọ aka - enwere ike iji mpaghara nke komma dị ka nkeji nke nkwupụta niile ha.
N'ọnọdụ nke ufixed(9,7)
, na-enweta nsonaazụ nke fraction na denominator nke 27 - mpaghara ọnụ ọgụgụ ga-adị site na 0.00 ruo 511 + 126⁄127
Iji gbanwee na nkwupụta decimal, a ga-ekewapụ nrụpụta komma site na 128.
N'ịbụ nke a, a na-eme ka mgbakọ dị mfe, n'ihi na nbata na-apụta na-akpaghị aka, nke na-eme ka ụdị a na-abụkarị ahọrọ.
Otú ọ dị, ụdị a nwere ihe ọjọọ, na nkeji komma na nkwupụta decimal adịghị enwe nkwupụta zuru oke, ya mere, nkeji decimal ga-abụ 0.01
, kama 0.007874
, nke ga-eduga na njehie rounding.
Ụzọ ị ga-esi nyochaa na-eji, a ga-ede ya na ebe eji ya.
Ụdị ọnụahịa Fließkomma ma ọ bụ Gleitkomma
Uru Gleitkomma bụ ụdị usoro mgbakọ na mwepụ nke dị mgbagwoju anya, ebe a na-egosi ọnụ ọgụgụ zuru ezu na nhazi a kapịrị ọnụ site na usoro mgbakọ, nke a na-emepụta akụkụ decimal site na ịkwaga - na na-eme ka ọ bụrụ na ọ na-ejikọta na nkọwa sayensị.
Usoro a kacha eji eme ihe, e mepụtara ya na
IEEE 754 ma kwanyere ya ùgwù n'ụwa niile kemgbe ahụ.
N'ịbụ nke a, uru Gleitkomma na-adịkarị site na ihe ndị a:
Nka (0 ma ọ bụ 1 ) |
Exponent | Mantisse |
Mgbe nkà ahụ na-adị mfe ịghọta dịka ozi binaire ee/mbanụ, nọmba ahụ na-apụta site na nchikota
Mantisse * 2Exponent
Tụkwasị na nke a, e nwere ọtụtụ ihe ndị a na-ahụkarị nke na-elekwasị anya na ihe pụrụ iche nọmba ezi uche - nke gụnyere ±∞
na NaN
("nọmba na-adịghị mma").
Uru Gleitkomma bara uru karịsịa mgbe nchekwube adịghị mkpa, n'ihi na ụdị uru a na-eme ka e nwee mperi okirikiri na ntụpọ na-atụpụrụ. A na-eji uru Gleitkomma eme ihe dịka ịkọwapụta mpaghara, dịka vertex vectors na 3D models ma ọ bụ Bézier/Spline curves maka ebumnuche ngosi.
N'ime usoro data, a na-akọwa uru Gleitkomma dịka float(Mantisse, Exponent)
.
Ọ bụrụ na a na-eji usoro ndị na-agbaso IEEE 754, a ga-egosipụta nke a nke ọma.