Nedir bu? · bei.pm

Bu metin, OpenAI GPT-4o Mini tarafından otomatik olarak çevrilmiştir.

Bu bölümde dosya formatları ve tersine mühendislik hakkında makaleler bulunmaktadır.

Ancak durum şöyle:
Dışarıda birçok programlama dili var ve birçok insan bazı şeyleri tamamen farklı adlarla biliyor - ya da programlama dilleri bunları soyutladığı için en temel şeylerin varlığı hakkında hiç bir fikri yok.

kısaca:
Benim notasyonum kabaca C99 <stdint.h> standardına dayanmaktadır. Bu notasyondan anlayan biri, benim notasyonumla da rahatlıkla çalışabilir.

Tam Sayı

Tam sayılar basitçe, ondalık kısmı olmayan, yani tam sayılardır.

Tam sayılar genellikle belirli bir sayı aralığı içinde, yani bir çözünürlükte tanımlanır. Bunu bit cinsinden veriyorum - çünkü "Bayt" ve buna dayalı türler (Word, Qword, ...) genellikle platforma özgüdür.

Ayrıca, tam sayı türleri arasında doğal sayılar (ℕ, yani işaretsiz - Unsigned) ve tam sayılar (ℤ, yani işaretli - Signed) arasında da bir ayrım yapılmaktadır.
Bu bilgi, tanımlayıcıda bir işaret ile (u veya s) görülebilmektedir.

Bununla birlikte, işaretli tam sayılar ya birler tamamlayıcısı olarak ya da ikiler tamlayanı olarak temsil edilebilir.
Farklı bir şey belirtilmedikçe, ikiler tamlayanı kullanılır, çünkü modern bilgisayar biliminde tercih edilen temsil biçimidir.

İşaretsiz sayılar, belgelerimde uint olarak belirtilir, ardından kesinlik Bit cinsinden verilir.
İşaretli sayılar ise belgelerimde sint olarak belirtilir, yine ardından kesinlik Bit cinsinden verilir.

"Char" veri türünü karakterler için kullanmaktan kaçınıyorum, çünkü karakter dizileri genellikle özel bir yorumlamaya sahip tam sayı değer dizilerini temsil eder.
Bu nedenle, bu diziler uint(8)[] olarak gösterilir.

Örnekler:

Notasyon C99 stdint.h-Eşdeğeri Açıklama Sayı Aralığı
uint(16) uint16_t Unsigned Integer, 16 Bit Uzunluğunda 0 - 65.535
sint(8) int8_t Signed Integer, 8 Bit Uzunluğunda, İkilik Tamamlayanı -126 - 127
uint(24) uint32_t:24 Unsigned Integer, 24 Bit Uzunluğunda 0 - 16.777.216

Festkomma-Değerleri

Sabit nokta değerleri, Rasyonel Sayılar (Q) spektrumundan sayısal değerlere sahiptir; bu nedenle bir noktaya ve ondalık basamağa sahiptirler.

Sabit nokta değerlerinde - adı üzerinde - noktanın konumu veri türü tarafından sabit olarak belirlenmiştir.
Bu nedenle, bu veri türü için sabit bir sayı aralığı ortaya çıkar; matematiksel olarak ifade edecek olursak, sayı alanı sınırlıdır.

Gerçek hayatta bu veri türü, yeterince hızlı bir kayan nokta donanım biriminin bulunmadığı platformlarda yaygın olarak kullanılmaktadır, çünkü sabit nokta değerlerinin hesaplaması tam sayılarla yapılabilir.

Ayrıca, bu veri türü, sabit gereksinimlerin karşılanması gerektiğinde örneğin veritabanı yönetim sistemleri tarafından da kullanılmaktadır.
Bu bağlamda, finansal verilerin kalıcı depolanmasına yönelik sistemler akla gelebilir; çoğu para birimi, noktadan sonra 2 basamakla sınırlıdır. (Bunun için sabit nokta değerleri kullanmak akıllıca değildir; daha akıllıca olan, bunun yerine doğrudan en küçük para birimini tam sayı olarak depolamak ve geri kalanını temsil düzeyine bırakmaktır.)

Tam sayı belirtimlerine benzer şekilde, sabit nokta değerlerinde sayının ön ve arka çözümlemesini belirtirim:
ufixed(9,7) ifadesi, noktadan önce 9 bit ve noktadan sonra 7 bit ayıran işaretsiz bir veri türünü tanımlar; toplamda 16 bit genişliğindedir ve böylece örneğin birbirinden bağımsız iki tam sayı vektörü olarak (0,0) ile (511,127) arasında bir aralığı kapsayabilir.
Bu yorumlama, ondalık gösteriminde 28 sayıyı boşa harcayacak, çünkü muhtemelen pratikte en fazla (511,99) ile sınırlı kalınacaktır.

Sabit nokta değerinin iki ayrı tam sayıdan oluşan bir vektör olarak doğrudan yorumlanması yerine - bu durum neredeyse her zaman ondalık sayılara dönüştürülürken kullanılmayan bir veri alanı ve manuel bir aktarım anlamına gelir - ondalık alan da bölme olarak tüm çözümlemesi üzerinden yorumlanabilir.
Yukarıda belirtilen ufixed(9,7) örneğinde, bu durumda bir paydanın 27 olduğu bir kesir ortaya çıkar; sayı aralığı 0,00 ile 511 + 126127 arasında olacaktır. Ondalık gösterime dönüştürmek için, bu nedenle ondalık basamağın 128'e bölünmesi gerekir.
Bu yöntemle, hesaplama işlemleri daha kolay gerçekleştirilir, çünkü aktarım otomatik olarak gerçekleşir; bu nedenle bu yöntem genellikle tercih edilmektedir.
Bununla birlikte, bu yöntemin dezavantajı, ondalık gösterimde ondalık basamakların artık garanti edilen bir çözünürlüğe sahip olmaması; dolayısıyla, tek bir ondalık basamağın 0.01 yerine 0.007874 değerini almasıdır ki bu da ilgili yuvarlama hatalarına yol açacaktır.

Hangi yorumlama yönteminin kullanılacağı, kullanım yerinde belgelenir.

Kesirli veya kayan nokta değerleri

Kaydırmalı sayılar, bir tam sayının sabit bir çözünürlükle matematiksel bir terim aracılığıyla ifade edildiği, ondalık kısmın etkili bir şekilde kaydırma ile oluşturulduğu ve bilimsel notasyon'a doğrudan atıfta bulunduğu matematiksel olarak daha karmaşık ifadelerdir.
Bunu gerçekleştirmenin en yaygın yolu, IEEE 754 ile standart hale getirilmiş ve o zamandan beri uluslararası olarak tanınmaktadır.

Kaydırmalı bir değer genellikle aşağıdaki bileşenlerden oluşur:

İşaret (0 veya 1) Üst değer Kesir

İşaret, ikili evet/hayır bilgisi olarak kolayca çıkarılabilirken, gerçek sayı aşağıdaki eşitlik aracılığıyla oluşur:
Kesir * 2Üst değer

Ayrıca, belirli durumları kapsayan bir dizi sabit değer vardır. Bunlar arasında ±∞ ve NaN ("geçerli bir sayı yok").

Kaydırmalı değerler, doğruluğun çok önemli olmadığı durumlarda özellikle faydalıdır, çünkü bu tür değerlerde kaçınılmaz olarak yuvarlama hataları ve dolayısıyla doğruluk kayıpları meydana gelir. Bu nedenle, kaydırmalı değerler genellikle 3D modellerdeki köşe vektörleri veya optik temsil amaçları için Bézier/spline eğrileri gibi koordinatların tanımlanmasında kullanılır.

Veri formatlarında kaydırmalı değerler float(Kesir, Üst değer) olarak belirtilir.
IEEE 754'ten farklı bir format kullanılıyorsa, bu uygun şekilde belirtilir.