Algoritmalar ve Programlama DERS - 2 Yrd. Doç. Dr. Ahmet SERBES
Programlama Bilgisayara ne yapması gerektiğini, yani onunla konuşmamızı sağlayan dil. Tüm yazılımlar programlama dilleri ile yazılır. 1. Seviye Makine dili 2. Seviye Assembly dili 3. Seviye C, C++, Java, Fortran vs 4. Seviye SQL, veritabanı sorgulama dilleri 5. Seviye Doğal dil işleyen akıllı diller Bir bilgisayar programının çalışması genel olarak: YORUMLAYICI Kaynak Kodu.c,.cpp,.h,.pas,.m Derleyici.obj.out.cof Bağlayıcı.exe.hex.bin Makine Dili
İkilik Sayı Sistemi Bilgisayar sistemleri 2 lik sayı sistemi kullanır. İkilik sayı sisteminde her sayıyı oluşturan rakama bit (binary information unit) denir. Örn, 1 bytelık sayı: 1 0 0 1 0 1 1 0 MSB = 1 2 7 + 0 2 6 + 0 2 5 + 1 2 4 + 0 2 3 + 1 2 2 + 1 2 1 + 0 = 150 8 bit = 1 byte, 16 bit = 2 byte = 1 word 4 bit = nibble LSB
İkilik Sayı Sistemleri 8 bitlik pozitif sayılar 0-255, 16 bitlik pozitif sayılar 0-1023, 32 bitlik pozitif sayılar 0-4GB (2 32 1 bit) arasıdır. Genel olarak, 2 lik sayı sistemi binary. örn, 01001101b 10 luk sayı sistemi decimal, 157d veya 157 16 lık sayı sistemi hexadecimal, 9Dh veya 0x9d A 10, B 11, C 12, D 13, E 14, F 15 10 luk sayı sisteminden 2 lik sayı sistemine ardışıl olarak 2 ye bölerek geçilir.
İkilik Sayı Sistemi Bir byte lık en küçük pozitif sayı 0000 0000 (0) ve 1111 1111 (255) Aradaki tüm sayılar pozitiftir. Negatif sayılar söz konusu olduğunda 1 byte lık sayıyı -128 ile +127 arasında değerler alan iki parçaya böleriz. En baştaki bit sayının pozitif ya da negatif olduğunu belirtir. Pozitif sayılar 0000 0001 (1) ile 0111 1111 (127) arasında Negatif sayılar 1111 1111 (-1) ile 1000 0000 (-127) arasındadır. İkilik sistemde negatif sayılar 2 nin tümleyeni alınarak bulunur. Örn, 53 0011 0101b olarak kolayca bulunur. İkilik düzende -53 ü bulmak için 0011 0101b deki bitler evrilir ve 1 eklenir: 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 0 +1 = 1 1 0 0 1 0 1 1 53 2 nin tümleyeni -53
Neden 2 nin Tümleyeni? Negatif sayıları 2 nin tümleyeni şeklinde göstermek çıkarma işleminin basit olarak yapılmasını sağlar. Örneğin 40-20 yi 2 ye tümleyenle hesaplayalım: 40 20 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 0 20 1 0 0 0 1 0 1 0 0 = 20 Bilgisayar, çıkarma işlemini pozitif sayıyla negatif sayıyı toplayarak yapar. 57-124 ü 2 ye tümleyenle hesaplayalım: 57 124 0 0 1 1 1 0 0 1 1 0 0 0 0 1 0 0 67 1 0 1 1 1 1 0 1 = 67
Fazlalık Gösterimi Sayı Fazlalık Sayı Bit Katarı 7 15 1111 6 14 1110 5 13 1101 4 12 1100 3 11 1011 2 10 1010 1 9 1001 0 8 1000-1 7 0111-2 6 0110-3 5 0101-4 4 0100-5 3 0011-6 2 0010-7 1 0001-8 0 0000 Fazlalık gösteriminde (excess notation) sayılar sıralıdır. Yanlı gösterimin özel bir halidir. Kayan noktalı (floating point) sayı sistemlerinde kullanılır.
Fazlalık Gösterimi Hesaplanması Örneğin, 8 bitlik fazlalık gösteriminde, 2 8 1 = 128 sihirli sayı olarak adlandırılır (herhangi bir sihir olmasa da). Daha sonra sayının değeri normal olarak hesaplanır. En son, hesaplanan değerden sihirli sayı çıkarılır. Örn, 0110 0001 sayısının fazlalık gösteriminde gerçek değerini hesaplamak için 1. Sihirli sayı = 2 8 1 = 128 2. 2 0 + 2 5 + 2 6 = 97 olarak bulunur. 3. 97 128 = 31 olarak değer hesaplanır. Başka bir örnek olarak 16 bitlik fazlalık gösteriminde 1001 0000 0101 1101 sayısının fazlalık gösterimindeki değeri 1. Sihirli sayı = 2 16 1 = 32768 2. 1001 0000 0101 1101 = 36957 olarak normal şekilde hesaplanır 3. 36957-32768 = 4189 olarak değer bulunur.
Noktalı Gösterim Kayan noktalı (floating point) gösterim Bit katarının alabileceği en yüksek değerden daha yüksek sayıları ifade edebilmek için Gerçel (reel) sayıları, yani kesirli sayıları ifade edebilmek için kullanılır. Sabit noktalı (fixed point) gösterim Sadece kesirli sayıları ifade etmeye yarar. Noktanın yeri sabittir.
Sabit Noktalı Gösterim Küsüratlı sayıları ifade etmeye yarar. Örn., 8 bitlik gösterimde noktanın yeri 3. ile 4. bit arasındaysa 4.4 lük gösterim olarak adlandırılır. 1011.0101 4.4 lük gösterim 0.101 1010 1.5 lik gösterim Virgülden sonraki bitler kesirli kısmı (mantis) gösterir. Örn, a 7 a 6 a 5 a 4. a 3 a 2 a 1 a 0 da kesirli kısım: a 3 2 1 + a 2 2 2 + a 1 2 3 + a 0 2 4 Virgülden önceki bitler 2 nin tümleyeni gösterimindedir. Örn., 4.4 lük gösterimde 0110 1011 6.6875 1011 0110 5.375 a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0
Sabit Noktalı Gösterim Değer a 7 a 6 a 5 a 4 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111-1 1111-2 1110-3 1101-4 1100-5 1011-6 1010-7 1001-8 1000 İkinin tümleyeni Değer a 3 a 2 a 1 a 0 0 0000 0.0625 0001 0.125 0010 0.1875 0011 0.25 0100 0.3125 0101 0.375 0110 0.4375 0111 0.5 1000 0.5625 1001 0.625 1010 0.6875 1011 0.75 1100 0.8125 1101 0.875 1110 09335 1111 Normal gösterim a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0 Örn. 4.4 lük sabit nokta gösterimi. -8.93375 ile 7.96675 arasında değer alır. Örn., 1100 1011 = -4.6875
Kayan Noktalı Gösterim Kayan noktalı gösterim (floating point representation) Kesirli Çok yüksek ve Çok düşük sayıları göstermeye yarar. Bit katarı üç bölgeye ayrılır: İşaret biti Üstel Mantis (kesirli kısım) İşaret Biti Üstel Mantis
Kayan Noktalı Gösterim a 7 a 6 a 5 a 4 a 3 a 2 a 1 a 0 a 7 ± işaret biti a 6 a 5 a 4 fazlalık gösteriminde üstel 2 a 6a 5 a 4 a 3 a 2 a 1 a 0 kesirli kısım 1. a 3 a 2 a 1 a 0 8 bitlik sayı: a 7 == 0 ise 1. a 3 a 2 a 1 a 0 2 a 6a 5 a 4 a 7 == 1 ise 1. a 3 a 2 a 1 a 0 2 a 6a 5 a 4 Örnek: 0111 1001 0 111 1001 ayrılır 0 pozitif 111 üstel kısım. Artık gösterimde 3 e eşit. 2 3 1.1001 1.5625 Sonuç olarak 1.5625 8 = 12.5
IEEE 754 Tek Hassasiyetli Kayan Nokta Gösterimi İşaret Biti Fazlalık gösteriminde 8 bitlik üstel kısım 23 bitlik mantis Tek hassasiyetli gösterim 32 bitliktir. İşaret biti 1 ise sayı negatif, değilse pozitiftir. 23 bitlik mantis 24 bitlikmiş gibi hesaplanır. 8 bitlik üstel kısım fazlalık-127 gösterimindedir.
Mantis Hesaplama 1. b 22 b 21 b 20 b 19 b 18 b 17 b 16 b 15 b 14 b 13 b 12 b 11 b 10 b 9 b 8 b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 23 bitlik mantis 24 bitlikmiş gibi hesaplanır. 23 bitlik mantis 1. b 22 b 21 b 0 Örn, Mantis 1011 0101 0000 0000 0000 000 ise değeri ise başına bir ekleyip: 1.1011 0101 0000 0000 0000 000 = 1 + 2 1 + 2 3 + 2 4 + 2 6 + 2 8 = 1.7070 şeklinde hesaplanır. Mantisin alabileceği en küçük değer 1 değeridir. En büyük değer ise 2 2 23 olur.
Üstel Hesabı Üstel, fazlalık-127 gösterimindedir. 128 ve -127 değerleri özel sayılar için ayrılmıştır. Üstelin alabileceği En düşük değer -126 (0000 0001) En yüksek değer 127 (1111 1110) olmaktadır. Örneğin, -34 değerini fazlalık-127 gösteriminde ikilik olarak, -34 + 127 = 93 93 0101 1101 Örneğin, 1001 0101 değeri fazlalık-127 gösterimindeki karşılığı 1001 0101 149 149 127 = 22 Fazlalık gösteriminde 8 bitlik üstel kısım
En Yüksek ve En Düşük Değerler Tek hassasiyetli kayan nokta gösteriminde yazılabilecek en yüksek sayı 0 1111 1110 1111 1111 1111 1111 1111 111 = +1 2 127 (2 2 23 2) 1.111 1111 1111 1111 1111 111 2 1111 1111 2 128 3.4028e + 38 Yazılabilecek en küçük sayı: 3.4028e + 38 (sadece işaret biti değişir) Yazılabilecek en küçük pozitif sayı 0 0000 0001 0000 0000 0000 0000 0000 000 = +1 2 126 1.0 = 2 126 1.1755e 38 Yazılabilecek en yüksek negatif sayı: 2 126 1.1755e 38 (sadece işaret biti değişir
Özel Kayan Noktalı Sayılar Kayan noktalı sayılarda normalde 0, ± ve NaN tanımlayabilmek için üsteli 0000 0000 ve 1111 1111 değerleri rezervedir. Üstel 0000 0000 değeri 0 ve 0 sayıları için ayrılmıştır: İşaret biti 0 değer 0 (sayı/ = 0, sayı/0 = ) İşaret biti 1 değer 0 (sayı/ = 0, sayı/ 0 = ) Pozitif ve negatif sonsuz değerleri de özel float sayılardır. 0 1111 1111 0000 0000 0000 0000 0000 000 + 1 1111 1111 0000 0000 0000 0000 0000 000 0/0, ± /±, + + ( ), 0 0, 1 ve bunun gibi işlemlerin sonucu olarak NaN (Not a Number) 0 1111 1111 XXXX XXXX XXXX XXXX XXXX XXX +NaN sıfırdan farklı 1 1111 1111 XXXX XXXX XXXX XXXX XXXX XXX NaN sıfırdan farklı
Tek Hassasiyetli Kayan Nokta: Örnekler Örneğin, 39887,5625 sayısı IEEE 32-bit kayan nokta formatında: Tam sayı kısım 3988710 1001 1011 1100 1111. Kesirli kısım: 0,5625 = 1 0,5 + 0 0,25 + 0 0,125 + 1 0.0625 0.1001 Böylece sayı: 1001 1011 1100 1111,1001 1. Normalize et: 1001 1011 1100 1111,1001 = 1,0011 0111 1001 1111 0010 2 15 2. Mantis: 0011 0111 1001 1111 0010 000 3. Üstel 15 + 127 = 142 1000 1110 4. İşaret biti 0. Dolayısıyla 39887.5625 0100 0111 0001 1011 1100 1111 1001 0000 = 471bcf9016
Çift Hassasiyetli Kayan Nokta İşaret Üstel Mantis Toplam 64 bit. 1 bit işaret için 11 bitlik üstel, artık 1023 formatında 52 bit mantis (53 bit formatında) b 51, b 50,, b 0 1 işaret 1. b 51 b 50 b 0 2 üstel 1023 En büyük sayı 1.7977 10 308, En küçük sayı: 1.7977 10 308