ꦱꦶꦠꦶꦤ꧀ ꦱꦶꦠꦶ? · bei.pm
Ing rubrik iki ana artikel babagan format file lan rekayasa terbalik.
Nanging saiki kaya ngene:
Ana akeh basa pemrograman ing njaba kana lan akeh wong sing ngerti sawetara perkara nganggo jeneng sing banget beda - utawa malah ora ngerti babagan eksistensi perkara-perkara dasar amarga basa pemrograman kasebut ngurangi saka dheweke.
tl;dr:
Notation kula ngarahake kira-kira dhateng C99 <stdint.h>
. Sapo sing bisa ngerteni notation iki, mesthi bakal bisa ngerteni notation kula.
Integer
Integer iku angka bulat, yaiku angka tanpa bagian desimal.
Integer ing format data biasane ditemtokake ing rentang angka sing tetep, kaya resolusi. Iki aku sebutake ing Bit - amarga "Byte" lan jinis-jinis sing adhedhasar iki (Word, Qword, ...) biasane gumantung platform.
Saliyane, ana bedane antarane jinis Integer, yaiku angka alami (ℕ, yaiku, tanpa tanda - Unsigned) lan angka bulat (ℤ, yaiku, nganggo tanda - Signed).
Informasi iki bisa dideleng saka tanda ing penanda (u
utawa s
).
Iku bisa uga, angka bulat signed bisa digambarake minangka One's complement utawa Two's complement.
Selama ora ana informasi liyane, Two's complement digunakake, amarga iki minangka representasi sing disukai ing ilmu komputer modern.
Angka tanpa tanda aku sebutake ing dokumentasiku minangka uint
, karo rincian akurasi ing Bits.
Angka nganggo tanda aku sebutake ing dokumentasiku minangka sint
, uga karo rincian akurasi ing Bits.
Aku ora nggunakake jinis data "char" kanggo karakter, amarga urutan karakter biasane mung nggambarake rantai nilai Integer kanthi interpretasi khusus.
Iki amarga digambarake minangka uint(8)[].
Conto:
Notasi | C99 stdint.h -Ekivalen |
Gambaran | Ruang Angka |
---|---|---|---|
uint(16) | uint16_t | Integer Tanpa Tanda, Panjang 16 Bit | 0 - 65.535 |
sint(8) | int8_t | Integer Dengan Tanda, Panjang 8 Bit, Komplement Dua | -126 - 127 |
uint(24) | uint32_t:24 | Integer Tanpa Tanda, Panjang 24 Bit | 0 - 16.777.216 |
Nilai Festkomma
Nilai Festkomma iku angka-angka sing kalebu ing spektrum Angka Rasional (Q), sing nduweni komma lan angka desimal.
Ing nilai Festkomma, posisi koma kasebut wis ditemtokake dening jinis data.
Mula, ana watesan angka sing tetep kanggo angka jinis data iki; sacara matematis, ruang angkane iku terbatas.
Ing kasunyatan, jinis data iki biasane digunakake ing platform sing ora nduweni unit hardware floating-point sing cukup cepet, amarga perhitungan nilai Festkomma bisa ditindakake dening unit integer.
Jinis data iki uga digunakake, contone, dening sistem manajemen basis data, nalika syarat-syarat tetep kudu dipenuhi.
Contone, iki ana ing sistem kanggo nyimpen data finansial secara permanen; umume mata uang winates nganti 2 angka sawise koma.
(Iki ora pinter kanggo nggunakake nilai Festkomma; luwih pinter, luwih becik langsung nyimpen unit mata uang paling cilik minangka integer lan nglilani sisa lapisan tampilan.)
Sakdawane integer, ing nilai Festkomma aku nyebutake resolusi angka saduran lan sawise koma:
ufixed(9,7)
nuduhake jinis data sing ora tandha 9 bit kanggo nilai ing ngarep koma, lan 7 bit kanggo nilai sawise koma; total 16 bit lan bisa nutupi wilayah (0,0) nganti (511,127) minangka vektor loro integer sing independen.
Interpretasi iki bakal nyebabake 28 angka ora digunakake ing representasi desimal, amarga bisa jadi luwih winates ing praktik nganti (511,99).
Saliyane interpretasi langsung saka nilai Festkomma minangka vektor saka 2 integer kapisah - sing mesthi nyebabake wilayah data sing ora digunakake nalika ngowahi dadi angka desimal lan nyebabake transfer manual - bisa uga wilayah desimal diinterpretasi minangka pecahan saka total resolusi.
Contone, saka ufixed(9,7)
iki dadi pecahan kanthi penyebut 27 - wilayah angka banjur saka 0,00 nganti 511 + 126⁄127
Kanggo ngowahi menyang representasi desimal, angka desimal kudu dibagi 128.
Kanthi variasi iki, operasi perhitungan bisa ditindakake luwih gampang, amarga transfer muncul kanthi otomatis, saengga variasi iki umume diutamakan.
Nanging, variasi iki nduweni kekurangan, yaiku angka desimal ing representasi desimal ora duwe resolusi sing dijamin, saengga siji angka desimal ora maneh nduweni nilai 0.01
, nanging 0.007874
, sing bakal nyebabake kesalahan pembulatan.
Cara interpretasi sing digunakake bakal didokumentasikan ing panggonan panggunaan.
Nilai Fließkomma utawa Gleitkomma
Nilai floating point iku ungkapan matematis sing luwih kompleks, ing ngendi angka bulat kanthi resolusi tetep dinyatakaké liwat istilah matematis supaya bagean desimalé kabentuk kanthi pergeseran - lan langsung nyambung menyang notasi ilmiah.
Cara paling umum kanggo nglakoni iku wis distandarisasi nganggo
IEEE 754 lan wis diakoni sacara internasional.
Nalika iku, nilai floating point biasane dumadi saka komponen-komponen ing ngisor iki:
Tanda (0 utawa 1 ) |
Eksponen | Mantissa |
Sedhawané tanda minangka informasi biner Ya/Tidak sing gampang dipahami, angka sejatine kabentuk liwat persamaan
Mantissa * 2Eksponen
Saliyane, ana uga sawetara nilai konstan sing nutupi kasus khusus angka rasional - kalebu ±∞
lan NaN
("ora ana angka sing sah").
Nilai floating point utamane migunani nalika akurasi ora dadi perkara penting, amarga ing jinis nilai iki mesthi ana kesalahan pembulatan lan akibaté kehilangan akurasi. Umumé, nilai floating point digunakake contone kanggo nemtokake koordinat, kaya vektor vertex ing model 3D utawa kurva Bézier/Spline kanggo tujuan representasi optik.
Dina format data, nilai floating point dispesifikasikaké minangka float(Mantissa, Eksponen)
.
Yen format sing digunakake ora kaya IEEE 754, iki bakal dituduhake kanthi cocog.