Apa itu? · bei.pm
Dalam kategori ini terdapat artikel mengenai format fail dan kejuruteraan terbalik.
Tetapi sekarang begini:
Terdapat banyak bahasa pengaturcaraan di luar sana dan ramai orang yang mengenali beberapa perkara dengan nama yang sama sekali berbeza - atau bahkan tidak mempunyai sebarang idea tentang kewujudan perkara-perkara asas kerana bahasa pengaturcaraan mereka mengabstrakkan perkara-perkara tersebut dari mereka.
tl;dr:
Notasi saya secara kasar berorientasikan kepada C99 <stdint.h>
. Sesiapa yang boleh memahami notasi ini pasti akan dapat menyesuaikan diri dengan notasi saya.
Integer
Integer adalah angka bulat, iaitu nombor tanpa bahagian perpuluhan.
Integer biasanya ditakrifkan dalam format data dalam julat nombor yang tetap, hampir seperti resolusi. Saya menyatakannya dalam Bit - kerana "Byte" dan jenis-jenis yang dibina di atasnya (Word, Qword, ...) biasanya bergantung kepada platform.
Selain itu, terdapat juga perbezaan antara nombor semula jadi (ℕ, iaitu tanpa tanda - Unsigned) dan nombor bulat (ℤ, iaitu dengan tanda - Signed).
Informasi ini dapat dilihat melalui tanda dalam penama (u
atau s
).
Dalam hal ini, nombor bulat bertanda boleh diwakili sebagai komplement satu atau sebagai komplement dua.
Selagi tidak dinyatakan sebaliknya, komplement dua akan digunakan, kerana ia merupakan representasi yang lebih disukai dalam sains komputer moden.
Nombor tanpa tanda akan saya nyatakan dalam dokumentasi saya sebagai uint
, diikuti dengan ketepatan dalam Bits.
Nombor bertanda akan saya nyatakan dalam dokumentasi saya sebagai sint
, juga diikuti dengan ketepatan dalam Bits.
Saya tidak menggunakan jenis data "char" untuk watak, kerana rentetan biasanya hanya mewakili urutan nilai Integer dengan tafsiran khusus.
Oleh itu, ini diwakili sebagai uint(8)[].
Contoh:
Notasi | Setara C99 stdint.h |
Deskripsi | 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 tetap adalah nilai angka dari spektrum Angka Rasional (Q), yang dengan itu mempunyai koma serta tempat desimal.
Pada nilai tetap, - sesuai dengan namanya - posisi koma ditentukan secara tetap oleh jenis data.
Ini juga menghasilkan rentang angka tetap untuk angka dari jenis data ini; diungkapkan secara matematis, ruang angka adalah terbatas.
Dalam kenyataannya, jenis data ini terutama digunakan pada platform tanpa unit perangkat keras floating-point yang cukup cepat, kerana penghitungan nilai tetap dapat dilakukan dengan unit integer.
Jenis data ini juga digunakan, misalnya, oleh sistem pengurusan pangkalan data, apabila keperluan tetap perlu dipenuhi.
Contohnya, kita boleh memikirkan tentang sistem untuk penyimpanan data kewangan yang berterusan; kebanyakan mata wang terbatas pada 2 tempat selepas koma.
(Tetapi tidak bijak mengambil nilai tetap untuk ini; lebih bijak menyimpan unit mata wang terkecil sebagai integer dan membiarkan sisa tahap representasi)
Sama seperti penyataan integer, saya memberikan resolusi angka sebelum dan selepas koma pada nilai tetap:
ufixed(9,7)
merujuk kepada jenis data yang tidak bertanda, yang memperuntukkan 9 bit untuk nilai sebelum koma, serta 7 bit untuk nilai selepas koma; jadi secara keseluruhan ia adalah 16 bit lebar dan dapat meliputi julat dari (0,0) hingga (511,127) sebagai vektor dua integer yang saling tidak bergantung.
Penafsiran ini, bagaimanapun, akan membuang 28 angka dalam representasi desimalnya, kerana kemungkinan besar akan terhad kepada maksimum (511,99) dalam praktik.
Sebagai ganti penafsiran langsung nilai tetap sebagai vektor dari 2 integer yang berasingan - yang hampir selalu bermaksud ada kawasan data yang tidak digunakan ketika ditukar ke angka desimal dan memerlukan perpindahan manual - sebaliknya, kawasan desimal juga dapat ditafsirkan sebagai pecahan dari keseluruhan resolusi mereka.
Mengambil contoh ufixed(9,7)
yang disebutkan, ini menghasilkan pecahan dengan penyebut sebesar 27 - julat angka kemudian adalah dari 0,00 hingga 511 + 126⁄127
Untuk menukar kepada representasi desimal, tempat desimal perlu dibahagikan dengan 128.
Dengan varian ini, operasi pengiraan lebih mudah dilakukan, kerana perpindahan berlaku secara automatik, menjadikan varian ini biasanya diutamakan.
Pada varian ini, bagaimanapun, terdapat kelemahan bahawa tempat desimal dalam representasi desimal tidak lagi mempunyai resolusi yang terjamin, satu tempat desimal tidak lagi mempunyai nilai setara 0.01
, tetapi 0.007874
, yang akan menyebabkan kesalahan pembulatan yang sesuai.
Kaedah penafsiran yang digunakan akan didokumentasikan sesuai dengan tempat penggunaannya.
Nilai titik terapung atau nilai titik apungan
Nilai titik terapung adalah ungkapan matematik yang lebih kompleks, di mana nombor bulat dengan resolusi tetap dinyatakan melalui ungkapan matematik sehingga bahagian selepas titik dibentuk melalui pergeseran - dan dengan itu secara langsung berorientasi pada notasi saintifik.
Cara yang paling biasa untuk melaksanakannya telah dipiawaikan dengan
IEEE 754 dan telah diiktiraf secara antarabangsa sejak itu.
Nilai titik terapung biasanya terdiri daripada komponen berikut:
Tanda (0 atau 1 ) |
Pangkat | Mantissa |
Sementara tanda dapat diperoleh dengan mudah sebagai maklumat binari Ya/Tidak, nombor yang sebenar terbentuk melalui persamaan
Mantissa * 2Pangkat
Selain itu, terdapat juga beberapa nilai konstant yang merangkumi kes khas nombor rasional - termasuk ±∞
dan NaN
("tiada nombor yang sah").
Nilai titik terapung sangat berguna apabila ketepatan tidak begitu penting, kerana dengan jenis nilai ini, pasti akan ada kesilapan pembulatan dan dengan itu kehilangan ketepatan. Nilai titik terapung biasanya digunakan sebagai contoh untuk mendefinisikan koordinat, seperti vektor puncak dalam model 3D atau kurva Bézier/Spline untuk tujuan representasi optik.
Dalam format data, nilai titik terapung ditentukan sebagai float(Mantissa, Pangkat)
.
Jika format yang berbeza daripada IEEE 754 digunakan, ia akan dinyatakan dengan sewajarnya.