Farklı sayısal veri türleriyle ilgilenmeniz için iki neden vardır.
1. Bellek tasarrufu
for(long k=0;k<=10;k++)
{
//stuff
}
Neden bir tamsayı, hatta bir bayt olabildiğince uzun bir süre kullanılsın? Gerçekten bunu yaparak birkaç bayt bellek tasarruf edersiniz.
2. Kayan nokta sayıları ve tamsayı sayıları bilgisayarda farklı şekilde saklanır
Diyelim ki 22 tamsayıda kayıtlı. Bilgisayar bu sayıyı ikili olarak belleğe kaydeder:
0000 0000 0000 0000 0000 0000 0001 0110
İkili sayı sistemine aşina değilseniz, bilimsel gösterimde şu şekilde temsil edilebilir: 2 ^ 0 * 0 + 2 ^ 1 * 1 + 2 ^ 2 * 1 + 2 ^ 3 * 0 + 2 ^ 4 * 1 + 2 ^ 5 * 0 + ... + 2 ^ 30 * 0. Son bit, sayının negatif olup olmadığını belirtmek için kullanılabilir veya kullanılamaz (veri türünün imzalı veya imzasız olmasına bağlı olarak).
Temelde, sadece 2 ^ (bit yeri) * değerinin bir toplamıdır.
Ondalık basamak içeren değerlere başvurduğunuzda bu durum değişir. Ondalık sayı olarak 3.75'in olduğunu varsayalım. Buna ikili dosyada 11.11 denir. Bunu bilimsel bir gösterim olarak 2 ^ 1 * 1 + 2 ^ 0 * 1 + 2 ^ -1 * 1 + 2 ^ -2 * 1 veya normalleştirilmiş olarak 1.111 * 2 ^ 2 olarak gösterebiliriz.
Ancak bilgisayar bunu saklayamaz: Bu ikili noktayı (ondalık noktanın ikili sayı sistemi sürümü) ifade etmek için açık bir yöntemi yoktur. Bilgisayar yalnızca 1'leri ve 0'ları depolayabilir. Kayan nokta veri türü burada devreye girer.
Sizeof (float) boyutunun 4 bayt olduğunu varsayarsak, toplam 32 bitiniz vardır. İlk bite "işaret biti" atanır. İmzasız şamandıra veya çiftler yoktur. Sonraki 8 bit "üs" için kullanılır ve son 23 bit "anlamlı" olarak kullanılır (veya bazen mantis olarak da adlandırılır). 3.75 örneğimizi kullanarak üsümüz 2 ^ 1 ve önemimiz 1.111 olacaktır.
İlk bit 1 ise sayı negatif olur. Değilse, olumlu. Üs, "sapma" adı verilen bir şeyle değiştirildiğinden, "0000 0010" u üs olarak saklayamayız. Tek duyarlıklı kayar nokta sayısı için sapma 127'dir ve çift duyarlıklı sapma (çift veri tipinin adını aldığı yer) 1023'tür. Son 23 bit anlamlılık için ayrılmıştır. Önemli olan, sadece ikili noktamızın SAĞ değerindeki değerlerdir.
Üsümüz önyargı (127) + üs (1) veya ikili olarak temsil edilir
1000 0000
Bizim amacımız:
111 0000 0000 0000 0000 0000
Bu nedenle, 3.75 şu şekilde temsil edilir:
0100 0000 0111 0000 0000 0000 0000 0000
Şimdi kayan nokta sayısı ve tam sayı olarak temsil edilen 8 rakamına bakalım:
0100 0001 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1000
Bilgisayar nasıl 8.0 ve 8 ekleyecek? Ya da onları çarpın !? Bilgisayar (daha spesifik olarak x86 bilgisayarlar) CPU'nun kayan nokta sayıları ve tamsayı sayıları ekleyen farklı bölümlerine sahiptir.