Verilerin saklanma şekli meselesidir. Sam'le olan ilişkiniz daha iyi bir karşılaştırma yapardı, eğer yazabildiniz, ancak yalnızca sekiz karakterlik kağıda sahiptiniz.
"Sam, bana telefon numarasını ver."
"5555555555"
“Ah hayır kağıt bitti. Keşke vaktinden önceden ne kadar veri istediğimi bilseydim daha iyi hazırlayabilirdim!”
Bunun yerine, çoğu dil size bir tür bildirir, bu nedenle önceden bilecek ve hazırlayacaktır:
"Sam, telefon numarası ne kadar?"
"On karakter."
“Tamam, o zaman daha büyük bir kağıt almama izin verin. Şimdi bana telefon numarasını verin.”
"5555555555"
"Anladım! Teşekkürler Sam!"
Verilerin depolandığı asıl temel yollara baktığınızda daha da belirginleşir. Eğer benim gibiyseniz, çeşitli notlar, sayılar sadece karalanmış, hiçbir şey için bağlam veya etiket bulunmayan bir defteriniz var ve üç gün sonra ne anlama geldiği hakkında hiçbir fikriniz yok. Bu, bilgisayarlar için de bir çok sorundur. Birçok dil "int" tipine (int, uzun, kısa, bayt) ve "float" (float, double) tiplerine sahiptir. Bu neden gerekli?
İlk önce bir tamsayı nasıl depolandığını ve genel olarak bilgisayarın içinde nasıl temsil edildiğini araştıralım. Muhtemelen, temel düzeyde, tamamen ikili olduğunu biliyorsunuzdur (1 ve 0). İkili aslında tam olarak ondalık sayı sistemimiz gibi çalışan bir sayı sistemidir. Ondalık olarak, 0 ile 9 arasında sayın (sonsuz olmayan ima edilen satır sıfırlarıyla birlikte yazmazsınız), sonra 0'a geri dönersiniz ve bir sonraki basamağı yükseltirsiniz, böylece 10'unuz olur. 99 - 100 arasında geçiş yapana kadar tekrarlayın.
İkili değer farklı değildir, 0 - 9 yerine 0 - 1 arasında sayılır. 0, 1, 10, 11, 100, 101, 110, 111, 1000. 9'u yazdığınızda, ikili olarak kaydedilen hafızaya 1001 olarak. Bu gerçek bir sayıdır. Tam olarak bu şekilde eklenebilir, çıkarılabilir, çarpılabilir, vb. 10 + 1 = 11. 10 + 10 = 100 (1'den 0'a kadar yuvarlayın ve 1'i taşıyın). 11 x 10 = 110 (ve eşdeğer olarak, 11 + 11 = 110).
Şimdi asıl hafızada (kayıtlar dahil), hemen yan yana gelmek için bitlerin (potansiyel 1'ler veya 0 ') yanlarında bir liste, dizi var, bu bitleri yapmak için mantıklı bir şekilde düzenlenmiş durumda. 1'den büyük sayı. Sorun, ondalık sayılarla ne yaparsınız? Kayıttaki iki bit arasına bir donanım parçası ekleyemezsiniz ve her bit çifti arasına "ondalık bitler" eklemek çok pahalıya mal olur. Peki ne yapmalı?
Sen kodladın. Genel olarak, CPU veya yazılımın mimarisi bunun nasıl yapıldığını belirleyecektir, ancak ortak yollardan biri, kaydın ilk bitinde bir işaret (+ veya -, genellikle 1 negatif), bir mantis (numaranız değişmiş ) depolamaktır . bununla birlikte birçok kez aşağıdaki X bit sayısı için ondalıktan kurtulmak gerekir ve kalan kısım için bir üs (onu kaydırmak zorunda kaldığınız sayı). Bilimsel gösterime benzer.
Yazma, derleyicinin neye baktığını bilmesini sağlar. 1.3 değerini sicil 1'de sakladığınızı hayal edin. Burada sadece kendi fantezi kodlama şemasını göreceğiz, burada işaret için 1 bit, mantissa için 4, üs için 3 (işaret için 1 bit, büyüklük için 2). Bu pozitif bir sayıdır, bu nedenle işaret pozitifdir (0). Mantisimiz 13 (1101) ve üssümüz -1 (101 (negatif için 1, 01 = 1)) olacaktı. Bu yüzden 01101101 numaralı sicili 1 numaralı depoda saklıyoruz. Şimdi bu değişkeni girmedik, bu nedenle çalışma zamanı onu kullanmaya başladığında, "kesinlikle, neden olmasın bir tamsayıdır" yazıyor. 32 + 8 + 4 + 1) açıkçası doğru değil.
Yine de her dil açıkça yazmanızı gerektirmez. C #, bir değişkenin türünün derleme zamanında yorumlanmasına neden olan bir "var" anahtar sözcüğüne sahiptir ve Javascript gibi diğer diller, bir tam sayıyı bir değişkende saklayabileceğiniz noktaya, sonra bir booleya atadıktan sonra tamamen dinamik bir şekilde yazılır, ardından bir dizeye tekrar atayın ve dil hepsini izler.
Ancak derleyici, tercüman veya çalışma zamanı için çok daha kolaydır - ve genellikle daha hızlı bir programla sonuçlanır, çünkü her şeyi yazarak değerli kaynakları harcamak zorunda kalmaz - size, programcıya, ne tür bir soru sormak için Verdiğiniz veri.