Herkesin duyduğu ancak genelde tam kavrayamadığı bir söylemdir bilgisayar dünyasında her şeyin bir ve sıfırlardan meydana geldiği... Diğer bir ifade de sayısal (dijital) ortamdır. Aslında sayısal ifadesi biraz ipucu veriyor. Gelin bu dünyaya bir bakış atalım...
Biz insanlar günlük hayatta on tabanındaki desimal (decimal) sayı sistemini kullanırız. Ancak bilgisayarlar iki tabanındaki ikili (binary) sayı sistemini kullanır. İkili sayı sisteminde sadece "0" ve "1" rakamları kullanılır ve doğal olarak en büyük rakam bir 'dir. Bir 'den büyük bir sayının ikili sistemdeki ifadesi için basamak sayısı arttırılır.
Sayı büyüdükçe (on tabanındaki) bu sayıyı ikili sistemdeki karşılığı ifade edilirken basamak sayısı hızlıca artar bu nedenle ikili sayı sisteminin insanlar tarafından algılanması oldukça güçtür.
Aslında sayı kavramı azlık/çokluk, miktar, seviye, büyüklük gibi durumları belirten soyut bir kavramdır. Günlük hayatta on tabanındaki sayı sistemini kullanmamızın nedeni algılanmasının kolay olmasından dolayı süregelen bir alışkanlıktır.
Bilgisayarlarda ikili sistemin kullanılmasının temel sebebi bu sayı sisteminin elektriksel ifadesinin kolay olmasıdır. Sinyal(voltaj) var durumu "1" değerini, sinyal yok durumu "0" değerini ifade eder. Bu nedenle ikili sayı sisteminin kullanılması bir zorunluluktur denilebilir. Bilgisayar elektronik bir cihaz olduğuna göre ikili sayı sistemi ile çalışan bilgisayar elektronik donanım yönünden sayısal (digital) elektronik alanına girer.
Ek bilgi olarak günümüz itibari ile biraz deneysel/teorik/utopik olan Kuantum bilgisayar lar adından da tahmin edilebileceği gibi her bitin "1","0"," 1 veya 0 ihtimali" şekinde üç farklı durumu olduğundan yola çıkarak karmaşık hesaplamalar yapar. Ancak konumuzun dışında kaldığı için sadece duymuş olun ve kafanızı karıştırmayın...
İkili sayı sisteminde ki sayı basamaklarına Bit (binary digit) denilmektedir. Yukarıdaki tabloda basamak sayısından bahsetmiştik. ikili bir sayının kaç basamaklı olduğu bit sayısı ile ifade edilir. Örneğin iki tabanındaki "1011" için 4 basamaklı ifadesi yerine 4bitl ik sayı/değer ifadesi kullanılır.
4 Bit kapasiteli basit bir sistem tasarlayalım. 4 adet lamba kullanarak "1" ve "0" değerlerini gösterelim. lambanın yanıyor olması "1", lambanın sönük olması "0" değerini temsil etsin.
4 Bit kapasiteli sistemimiz en fazla 16 farklı durumu ifade ederken en yüksek 15 (desimal) sayı değerine sahip olabiliyor. İkili bir sistemin aldığı en yüksek değer ve alabildiği farklı değer sayısı (çözünürlük olarak da ifade edilir) aşağıdaki formül ile hesaplanır.
Bu sistemde 4 bit kullanacağımıza baştan karar vermiştik ve her bit için bir lamba olmak üzere 4 adet lamba kullandık. Burada önemli olan ve iyi anlamamız gereken konu her bit için bir elektriksel donanım kullanılmış olmasıdır. Bilgisayarda da durum böyledir. Her bir bit in fiziksel karşılığı olarak bir donanım/elektronik devre vardır. Bu nedenle tüm bilgisayarların kapasitesi belirli limitler dahilindedir.
4 bitlik sistemimizdeki herhangi iki sayıyı ikili olarak yan yana yazalım. "10110111" şeklinde bir ikili verimiz var ancak bu 8 bitlik bir değer mi yoksa iki adet 4 bitlik değer mi ayırt edemiyoruz. Bu karışıklığın önüne geçmek için bilgisayar gelişiminin erken dönemlerinde 8 Bitlik dizilimler bir standart olarak kabul edilmiştir. Günümüzde tüm bilgisayarlar 8 Bit değerler üzerinden çalışırlar. Söz konusu 8 Bit değer veri birimi olan 1 byte 'a tekabül eder. (bayt olarak okunur)
"A" harfi "01000001" 8 bit olarak kaydedildiği için 1 byte boyutuna sahip... Normal şartlar altında 1/0 verilerini bir kullanıcının görmesi gerekmediği için doğrudan bu verileri göremeyiz. Ancak yine de görmek istiyorsak bir hex editör programı bize yardımcı olur. Hex editörler verileri bilgisayarın işlediği ham hali ile görüntülememizi sağlayan yardımcı programlardır. İsterseniz HxD adlı ücretsiz hex editör programını kendi sitesinden veya buraya tıklayarak yükleyebilirsiniz.
Hex editör ile notpad belgemizi açtığımızda "01000001" verisini "65" değerini "ve "A" karakterini görebiliyoruz.
İkili verinin nasıl bir alfabetik karaktere dönüştüğünü örneklemiş olduk. Bunun gibi başka dönüşümler de söz konusudur. Bu dönüşümler sistem(işlemci) komutları, renk tonu, ses seviyesi vs gibi çeşitli, daha çok bilgisayarın iç yapısında kullanılan işlere yararlar. Ayrıca daha çok programcıların aşina olduğu tam sayı, negatif sayı, ondalıklı sayı dönüşümleri de sıkça yapılır.
Başka bir örnek verelim. Notepad programı ikili verilerin karakter karşılıklarını gösteren bir programdır. Notepad ile bazı dosyaları açtığınızda okunaksız/anlamsız karakterler görürsünüz. Bu durumdan anlaşılması gereken açılan dosyadaki ikili verilerin karakter kodu değil de başka bir amaç için veriler barındırıyor olmasıdır. Tüm ikili verilerin karakter karşılı yoktur ve notepad tesadüfen karşılığı olan verileri karaktere dönüştürerek anlamsız, karışık karakter/semboller görüntüler.
Ascii tabloda Türkçe karakterler yoktur. Türkçe, Arapça, Çince vs. gibi İngiliz alfabesinde olmayan karakterler için daha gelişmiş (unicode gibi) kodlama sistemleri kullanıldığını da ek bilgi olarak ekleyelim.
Hex Kodu
Tam ikili sayıyı anlıyoruz derken karşımıza birde hex kodlama çıkıyor. Hex kodu 16 lı sayı sistemini kullanır. Bilgisayar hex kodu ile çalışmaz ancak sadece ikili verilerin okunmasını kolaylaştırmak için ikili veri kümeleri hex kodu ile gösterilir. Her 8bit/1Byte lık veri iki karakterlik hex sayısına/koduna denk gelir. Yukarıdaki hex editör ekran görüntüsünde "A" karakteri "41" değeri görülmektedir. Başka bir deneme daha yaparak HEX in nasıl kolaylık sağladığına bakalım.
"01 Adana" yazısını oluşturan karakterlerin ikili verisi şu şekildedir:
"00110000 00110001 00100000 01000001 01100100 01100001 01101110 01100001"
Birkaç karakterden oluşan bir veri bile oldukça uzun bir gösterime neden oldu. Hex editörün amacının karakter gösterimi değil de ham veri göstermek olduğunu hatırlatarak herhangi bir veriyi 1/0 ile bu şekilde göstermek oldukça karmaşık olacaktır. Bir çözüm verilerin üç basamaklı tamsayı(desimal) karşılıklarını göstermek olurdu ki bilgisayarlarımız ip adresi benzer şekildedir. 255 i aşmayacak şekilde "192.168.1.1" gibi yazılır. Ancak desimal kullanımında bir sıkıntı var üç basamaklı sayı 999 a kadar artarken veri kısmında 255 in üzeri yok... Bu durumda diğer bir çözüm olan iki basamaklı hex kullanılır. İki basamaklı hex in aldığı en büyük değer olan "FF" sayısı "11111111" ve 255 'e eşittir. On altı iki nin katı olduğundan tam eşleşme sağlanır.
"01 Adana" karakter dizemizin ham verisi hex olarak "30 31 20 41 64 61 6E 61" şeklinde gösterilir. Hex kullanımın temel amacı ham verinin okunmasını kolaylaştırmaktır.
Son olarak birden çok sayı sisteminin aynı anda kullanılması gerektiği durumlarda sayının sağ alt köşesine veya parantez içinde sayı sistemi yazılarak karışıklık önlenir. Aşağıdaki eşitlikleri inceleyiniz.
Konu biraz uzunca oldu. En temel kuralları en basit hali ile aktarmaya çalıştım. İnsanoğlu olarak 10 lu sayı sistemine o kadar alışmış durumdayız ki ikili sayı sistemini ile çalışmanın gerekliliklerini bir defada anlamayabiliriz. Kafanız karıştıysa panik yapmayın. Tekrar okuyun, başka kaynaklardan okuyun. Anlamak için kendinize zaman tanıyın...