Bilgisayar Bilimlerine Giriş 1 Dokuz Eylül Üniversitesi Bilgisayar Bilimleri Bölümü DR. RESMİYE NASİBOĞLU E-POSTA: RESMİYE.NASİBOGLU@DEU.EDU.TR ARAŞ. GÖR BARIŞ TEKİN TEZEL E-POSTA: BARİS.TEZEL@DEU.EDU.TR ARAŞ. GÖR ALİCAN DOĞAN E-POSTA: ALİCAN.DOGAN@DEU.EDU.TR
İnsanların bilgisayarları kullandığı farklı yerleri düşünelim. Günlük yaşantımızda bilgisayar kullanımı neredeyse limitsiz hale geldiğini kolaylıkla görebilirsiniz. (Akılı telefonlar, araba navigasyon sistemleri vb.. Şeylerin birer bilgisayar olduğunu unutmayın.) Bilgisayarların bu denli çeşitli işte kullanılmasının temel sebebi programlanabilir olmasıdır. Yani, tek bir işi yapmak için değil, programının söylediği herhangi bir işi yapmak için üretilirler. Bir program ise bilgisayarın bir işi yapmak için takip etmesi gereken talimatlar dizisidir. Programlar genellikle yazılım olarak adlandırılır. Herhangi bir yazılım olmadan bir bilgisayar hiçbir şey yapamaz. Bir program geliştirebilecek, yaratacak ve test edebilecek yetenekleler ve eğitime sahip kişilere programcı yada yazılım geliştiricisi denir. Programcılar iş dünyasından sağlığa pek çok alanda kendilerine yer bula bilmektedir.
Donanım Tipik bir bilgisayar aşağıdaki bileşenlerden oluşur CPU(Merkezi İşlem Birimi) Main Memory(Ana Bellek) Secondary Storage Devices(İkincil Depolama Cihazları) Input Devices(Girdi Cihazları) Output Devices(Çıktı Cihazları)
Bilgisayarlar ve Programlamaya Giriş CPU(Merkezi İşlem Birimi) Merkezi işlem birimi (CPU) bilgisayarların programları çalıştıran ( run veya execute) parçasıdır. CPU, bilgisayarın en önemli parçasıdır çünkü olmadığında bilgisayar herhangi bir yazılımı çalıştıramaz. ENIAC Bilgisayarı Intel 80486dx2 mikroişlemci Intel i7 mikroişlemci
Main Memory (Ana Bellek) Ana belleği, bilgisayarınızın çalışma alanı olarak görebilirsiniz. Bilgisayar, program çalışırken programın kendisini ve programın kullandığı verileri burada saklar. Ana bellek genellikle RAM(Random-Access Memory veya rasgele-erişimli bellek) olarak da bilinir. Bu şekilde isimlendirilmesinin sebebi CPU nun RAM içinde rasgele bir lokasyonda saklanan bir bilgiye hızlıca ulaşabilmesidir. RAM geçiçi bir bellek tipidir. Yalnızca bilgisayar çalışırken kullanılır. Bilgisayarınızı kapattığınız anda RAM içinde saklanan her şey silinir. Rasgele Erişimli Bellek
Secondary Storage Devices (İkincil Depolama Cihazları) İkincil depolama cihazları, ortamda güç olmasa dahi verilerin uzun zamanlı saklanmasına yararlar. Programlar normalde ikincil depolama cihazlarında saklanırken, çalıştırılacakları zaman ana belleğe alınırlar. Ayrıca bordro verileri, envanter kaydı gibi önemli dokumanlar da ikincil depolama cihazlarında saklanır. Bu cihazlara örnek olarak Disk Drive Hard Disk Drive (HDD) Floppy Disk Drive (FDD) Flash Memory Solid State Disk (SSD) Optical Devices CD ( Compact Disk) DVD (Digital Versatile Disk) HDD ve SSD
Input Devices (Girdi Cihazları) Bir bilgisayarın, insanlardan veya diğer cihazlardan topladığı herhangi bir veriye girdi (input) denir. Bu girdileri toplayıp bilgisayara yollayan tüm cihazlara girdi cihazları denir. Örneğin; klavye, fare, tarayıcı, mikrofon, dijital kamera vb.. Output Devices (Çıktı Cihazları) Bir bilgisayarın insanlar veya diğer cihazlar için ürettiği herhangi bir veriye çıktı (output) denir. Çıktıları doğru şekilde formatlayıp sunan araçlara ise çıktı cihazları denir. Örneğin; ekran, yazıcı, hopörler vb
Peki veriler bilgisayarda nasıl depolanır? Bir bilgisayarın belleği byte (bayt) adı verilen küçük depolama hücrelerine bölünmüştür. Bir bayt ancak alfabeden bir harf veya küçük bir sayı tutacak kadar büyüktür. Anlamlı bir şeyler yapa bilmesi için bilgisayarın çok fazla bayta ihtiyacı vardır. Günümüzdeki çoğu modern bilgisayarın milyon, hatta milyar baytlık bellekleri vardır. Her bir bayt bit olarak adlandırılan daha küçük sekiz adet depolama alanına ayrılır. Bit terim İngilizce binary digit (ikili rakam) kelimesine dayanmaktadır. Bilgisayar bilimciler çoğu zaman bitleri açık ve kapalı durumda olabilen küçük düğmeler olarak düşünürler. Pek çok bilgisayar sisteminde bitler, pozitif veya negatif yük taşıya bilen küçük elektriksel bileşenlerdir. Şimdi, verilerin depolanması ve temsilini iyi anlayabilmek için bilgisayar bilimlerinde sık sık karşılaşacağımız ikilik, sekizlik, onluk ve onaltılık sayı sistemlerini inceleyeceğiz. Sekiz düğmeden oluşan bayt gösterimi
(Sayı Sistemleri) En iyi tanıdığımız sistemden başlayalım. Günlük hayatta kullandığımız sayı sistemi olan onluk sistem (decimal) bizim için üzerinde çalışması en kolay olan sistemdir. Bu sistemi kullanırken sayıların aslında hangi mantıkla ifade edildiğini düşünmeyiz bile. Peki nedir bu mantık? Yani 462.15 = 4*100 + 6*10 + 2*1 + 1*1/10 + 5*1/100
(Sayı Sistemleri) Herhangi bir basamakta sayının değerini hesaplamak için bir formül vermek gerekirse: Rakam * SayıTabanı Basamak İkilik (binary) sayı sistemindeki 101.11 sayısı için bu formülü kullanalım. 101.11 2 = 1*2 2 + 0*2 1 + 1*2 0 + 1*2-1 + 1*2-2 = 5.75 10 Peki onluk sistemde yazılmış bir sayıyı başka bir sayı sisteminde nasıl yazarız? Sonuç sıfırdan büyük olduğu sürece sayıyı hedef sayı sisteminin tabanına bölerek kalanları tersten yazarız. Bir örnekle bakalım: 11 10 sayısını ikilik sistemde yazalım. 11 / 2 = 5, kalan 1 5 / 2 = 2, kalan 1 2 / 2 = 1, kalan 0 1 / 2 = 0, kalan 1 11 10 = 1011 2
(Sayı Sistemleri) Sekizlik ve Onaltılık sayı sistemlerine geçiş yapmanın ikilik sisteme geçiş yapmaktan pek bir farkı yoktur. 1473.2 8 1*8 3 + 4*8 2 + 7*8 1 + 3*8 0 + 2*8-1 = 827.25 10 33B.4 16 3*16 2 + 3*16 1 + B*16 0 + 4*16-1 = 827.25 10
(Sayı Sistemleri) 91 10 sayısını sekizlik ve onaltılık sistemde yazalım: 91/8 = 11, kalan 3 11/8 = 1, kalan 3 1/8 = 0, kalan 1 91 10 = 133 8 1*8 2 + 3*8 1 + 3*8 0 = 91 91/16 = 5, kalan 11 5/16 = 0, kalan 5 91 10 = 5B 16 5*16 1 + 11*16 0 = 91 Sayıların kesirli kısımlarını çevirirken ise bölme yerine çarpma işlemi kullanırız. Çarpım işlemlerini yalnızca ondalık kısım üzerinde, bir tamsayı elde edene kadar devam ettirir ve işlemler boyunca her adımdaki tam kısımları yukarıdan aşağıya doğru alırız..1875 10 sayısını ikilik tabanda yazalım. 0.1875*2 = 0.375 tam kısım 0 0.375*2 = 0.75 tam kısım 0 0.75*2 = 1.5 tam kısım 1 0.5*2 = 1.0 tam kısım 1.1875 10 =.0011 2 0*2-1 + 0*2-2 + 1*2-3 + 1*2-4 = 1/8 + 1/16 =.1875
(Sayı Sistemleri).1875 10 sayısını sekizlik ve onaltılık sistemde yazalım. 0.1875*8 = 1.5 tam kısım 1 0.5*8 = 4.0 tam kısım 4.1875 10 =.14 8 1*8-1 + 4*8-2 = 1/8 + 4/64 = 12/64 =.1875 0.1875*16 = 3.0 tam kısım 3.1875 10 =.3 16 3*16-1 =3/16 =.1875 Sekizlik ve Onaltılık sayı sistemleri neden önemli? Bu sayı sistemleri bilgisayar dünyasının farklı alanlarında farklı amaçlar için kullanılıyorlar. Ancak bilgisayarların çalıştığı ikilik sistemin yanı sıra bu sistemlerin de kullanılmasında en önemli neden, ikili sistemde ifade edilen sayıların çok fazla basamak içermesi ve bunların makine düzeyi haricinde kullanımının pratik olmamasıdır. Yine de her an ikili sisteme kolayca dönüşüm yapabilmek için 2 sayısının kuvvetleri olan bu sayıların sistemleri kullanılmaktadır.
(Sayı Sistemleri) Peki 2, 8 ve 16 sayı tabanları arasında nasıl kolay dönüşüm yapabiliriz? 8 = 2 3 olduğu için, 2 tabanındaki her 3 basamak 8 tabanındaki 1 basamağa karşılık gelir. 46 10 = 101110 2 101 2 = 5 8 110 = 6 8 46 10 = 101110 2 = 56 8 Benzer şekilde, 16 = 2 4 olduğu için... 46 10 = 101110 2 10 2 = 2 16 1110 = E 16 46 10 = 101110 2 = 2E 16
Sayı sistemlerine değindiğimize göre artık verilerin depolanması ve temsiline geçebiliriz. Tek bir bit sayı temsilinin limitli bir yoludur. Bitin açık yada kapalı olmasına göre iki farklı sayı temsil edilebilir. Bilgisayar sistemlerinde bir bitin kapalı olması sıfırı açık olması ise biri temsil eder. Bu durum ikili şayi sistemine mükemmel bir şekilde karşılık gelir. Çünkü ikili (binary) sayı sisteminde tüm nümerik değerle sıfır ve birlerin bir dizisi olarak gösterilir. Örneğin; 10011101
Bir baytın değeri, içinde tüm bitler sıfır yapılırsa 0, bir yapılırsa 255 olur. Bu durumda bir baytın alabileceği en büyük değer 255 olacaktır. Peki ya 255 den büyük bir değer temsil edilmek ve depolanmak istenirse ne yapılacak? Cevap gayet basit, birden fazla bayt kullan. Şekilde görüldüğü gibi iki bayt kullanıldığında yazılabilecek maksimum değer 65535 olacaktır.
Karakter depolama Bilgisayar belleğinde saklanan her bir veri mutlaka ikili sayı olarak tutulmalıdır. Bu durum harf veya özel işaret gibi karakterleri de içermektedir. Bir karakter depolandığı zaman önce numerik bir koda sonrada ikili tabana çevrilir. Yıllar boyunca bilgisayar belleğinde karakter kodlamak için değişik kodlama şemaları kullanıldı. Bunlardan, en önemli ve geçerlisi ASCII (American Standart Code for Informaiton Interchange) olarak kabul edilir.
ASCII/Unicode Karakter Tablosu
İleri Seviye Sayı Saklama Şimdiye kadar sayıların temsili ve bellekte nasıl saklandığına değinmiştik. Bilgisayarla da onluk sayılar bizim kullandığımız yöntemle ikilik sayı sistemine dönüştürülür ve aritmetik işlemler bildiğimiz biçimde yapılır. Ancak bunu yaparken sadece negatif olmayan tam sayıları ifade edebilmiştik. Daha önce ifade ettiğimiz teknikler negatif sayılar ve gerçel sayıların temsili için yeterli değildir. Bilgisayarlar negatif sayıları ve gerçel sayıları bellekte saklayabilirler ve temsil edebilirler ancak bunun için ikili sayı sistemi ile birlikte bir kodlama(encoding) şemasına ihtiyaçları vardır.
Negatif Sayıların Temsili Peki ya negatif sayılar? Biz sadece - işaretini kullanarak ve çıkarma işlemi yaparak bu işin içinden çıkabiliyoruz. Bilgisayarlarda ise bu iş biraz daha karmaşıktır. Negatif, yani işaretli tamsayıları temsil etmek için iki temel yöntem vardır: Bire Tümleme (One s complement) İkiye Tümleme (Two s complement) Bu yöntemlerden daha kullanışlı olanı ve modern bilgisayarların mimarisinde yer alanı ikiye tümleme yöntemidir.
Bire Tümleme Bire tümleme yönteminde negatif tamsayılar hesaplanırken yalnızca pozitif sayının tümleyeni alınır. Yani 1 ise 0, 0 ise 1 yazılır. 0110 = 6 1001 = -6 Çıkarma işlemi yapılırken sayının negatif temsili bulunur ve toplama işlemi yapılır. Taşan bit varsa sonuca eklenir. 5-3 = 2 0101 + 1100 = 10001 0001 + 1 = 0010 = 2
İkiye Tümleme İkiye tümleme yönteminde negatif tamsayılar hesaplanırken önce pozitif sayının tümleyeni alınır, sonra sayıya 1 eklenir. 0110 = 6 1010 = -6 Çıkarma işlemi yapılırken sayının negatif temsili bulunur ve toplama işlemi yapılır. Taşan bit dikkate alınmaz. 5-3 = 2 0101 + 1101 = 10010 0010 = 2
İşaretli tamsayılar ile 2 ye tümleyen sayıların grafik gösterimi
Çarpma işlemi ardarda toplama, bölme işlemi ise ardarda çıkarma işlemi yapılarak gerçekleştirilir. Reel sayıları temsil etmek için farklı standartlar belirlenmiştir ancak bu standartların hepsi benzer yöntemlerle kayan noktalı sayıları (floating point numbers) temsil eder. Günümüzde kayan noktalı sayıların temsilinde kabui edilen standart IEEE-754 standartıdır (1985). Onluk bir kayan noktalı sayı ifadesi: -1.2345E 6 = -1.2345 x 10-6 Genel ifade: S M x B E S: İşaret (Sign) M: Mantis (Mantissa) E: Üs (Exponent) B: Taban (Base)
1 bit 8 bit 23 bit Yukarıdaki gösterimde 32 bitlik bir reel sayının bellek paylaşımı gösterilmiştir. (-1) s x M x 2 E Burada 2 sayı tabanıdır. E kısmı ikiye tümlemeyle yapılabilir ancak bu bilgisayarlarda reel sayıların kıyaslanmasını zorlaştırdığından IEEE-754 standartı Exponent-bias yöntemini kabul etmiştir. E kısmında daha çok bit olması daha büyük sayıların temsil edilebileceği anlamına gelir. M kısmı hep pozitiftir ve burada daha çok bit olması daha fazla basamak hassasiyeti (precision) olacağı anlamına gelir.
Reel sayıların temsilini aşağıdaki tabloyla örneklendirebiliriz: IEEE-754 standartında mantisin en solundaki basamak hep 1 kabul edilir ve belleğe yazılmaz.
0 00000011 11000100000000000000000 = 1.10001 2 *2 3 = 1100.01 2 = 12.25 10 1 11111011 11001100110011001100110 = -1.1001100110011001100110 2 *2-5 -0.0000110011 2 = -0.05 10 Yukarıdaki sayılar temsil edilirken E ikiye tümleme ile M ise en solda daima 1 olduğu kabulu yapılmadan yazılmıştır. Kayan noktalı sayıların IEEE-754 standartında nasıl temsil edileceklerini anlamak için önce exponent-bias kullanımını öğrenmemiz gerekecek.
Exponent Bias Bu yöntemde, E üs için ayrılan bit sayısı olmak üzere: Bias = 2 E -1-1 şeklinde hesaplanır ve E kısmına yazılan pozitif sayıdan çıkarılır.
IEEE-754 standartında temsil etme yöntemini aşağıdaki örnekte inceleyelim. Half tipte (16 bit) tanımlanan -25.4 sayısının temsili: 25.4 10 = 25 10 + 0.4 10 25 10 = 11001 2.4 10 =.011001 2 Half için bellek paylaşımı: S = 1, E = 5, M = 10 Dolayısıyla Bias = 2 5-1 -1 = 15 11001.011001 2 = 1.1001011001 2 * 2 19-15 19 10 = 10011 2 = E (üs) 1001011001 = M (mantis) Sayı negatif olduğu için 1 = S (işaret) 1 10011 1001011001 S (1) E (5) M (10)
0 10000010 10001000000000000000000 = 1.10001 2 *2 3 = 1100.01 2 = 12.25 10 1 011111010 10011001100110011001100 = -1.1001100110011001100110 2 *2-5 -0.0000110011 2 = -0.05 10 Yukarıdaki örneklerde sayıların IEEE-754 standartında (single) temsili gösterilmiştir. IEEE-754 standartında E (üs) bölgesinde yalnızca 0 veya yalnızca 1 olması ve sayıların yuvarlanması durumları özel durumlardır. (Burada değinilmeyecektir.) 0 sayısını temsil etmek için S, E ve M bölgelerinde yalnızca 0 yazılır.
İkilik Sistem Birimleri 1 bit: 0 veya 1 bilgisinin saklandığı en küçük bellek hücresi. 8 bit = 1 Byte 2 10 Byte = 1024 Byte = 1 KiloByte (KB) 2 20 Byte = 1024 KByte = 1 MegaByte (MB) 2 30 Byte = 1024 MByte = 1 GigaByte (GB) 2 40 Byte = 1024 Gbyte= 1 TeraByte (TB) 2 50 Byte = PetaByte (PB) 2 60 Byte = ExaByte (EB) 2 70 Byte = ZettaByte (ZB) 2 80 Byte = YottaByte (YB)
ÖRNEKLER 1. 33 10 =? 2 2. 564 8 =? 10 3. FFFFFF 16 =? 10 4. 11101001 2 =? 8 5. FFFFFFF 16 =? 2 6. 100,10001 2 =? 10 F. 8,8FF 10 =? 2 8. 1043.9 sayısını ikilik, sekizlik ve onaltılık tabanlara çevirin. 9. -127 + 36 10. 15 6-59 + 40 işlemlerini ikilik sayı sisteminde bire tümleme ve ikiye tümleme yöntemleriyle ayrı ayrı gerçekleştiriniz. Not: Minimum sayıda bit kullanın. 11. -128.11 sayısının 16 bitlik (Half) IEEE-754 standartında temsilini yazınız.