bilgiz.org

C# İle biLGİsayar programlama temelleri (C# Programlama Kitabı) Svetlin Nakov & Co




Sayfa15/31
Tarih02.07.2017
Büyüklüğü3.36 Mb.

Indir 3.36 Mb.
1   ...   11   12   13   14   15   16   17   18   ...   31

Bölüm 8.Sayı Sistemleri


8.1 Bölümün İçindekileri
Bu bölümde sayıların farklı sayı sistemleri tarafından nasıl temsil edildikleri üzerinde çalışacağız. Sayıların ondalık, ikili ve onaltılık sayı sistemleri tarafından nasıl temsil edildiklerine daha fazla dikkat edeceğiz, çünkü onlar en yaygın olarak bilgisayar ve programlamada kullanılmaktadır. Bilgisayarlarda sayısal verileri – işaretli ve işaretsiz tamsayılar ve farklı türde gerçek sayıları kodlamanın farklı yollarını anlatacağız.

8.2 Sayı Sistemleri
Şimdi sayı sistemlerinin bilgisayarla hesaplamadaki rollerinin ne olduklarına ayrıntılı bir göz atalım.

8.2.1 Sayı Sistemleri Nedir?
Sayı sistemleri rakam olarak adlandırılan sonlu sayıdaki grafiksel işaretler ile sayıları temsil etmenin bir yoludur. Sayıları göstermek için kurallar da bu sisteme eklenmelidir. Belirli bir sayı sisteminde sayıları göstermek için kullanılan karakterler, o sistemin alfabesi olarak adlandırılabilir.
İnsan uygarlığının farklı gelişim aşamalarında, çeşitli sayı sistemleri popülerlik kazanmıştır. Bunların en yaygın kullanılanı Arapça rakam sistemidir. 0, 1, 2, 3, 4, 5, 6, 7, 8 ve 9 basamaklarından ve onların alfabesinden oluşmaktadır. (İlginç bir gerçek, Arap rakamlarının modern zamanlarda gösterimi sözü edilen on basamaktan farklı olmasına rağmen aynı ondalık rakam sistemine işaret etmesidir.)
Bir alfabenin yanı sıra, her rakam sisteminin bir tabanı vardır. Taban sistem içinde sayıları betimlemede kullanılan farklı basamak sayısıdır. 10 basamak Örneğin, Arapça rakam sistemi 10 basamak kullandığından ondalık olarak adlandırılır. 1 ve 0’dan farklı bir mutlak değere sahip olan rasgele bir sayı baz olarak seçilebilir. Aynı zamanda gerçek veya işareti olan karmaşık bir sayı da olabilir.

Şu soruyu pratikte sorabiliriz: Kullanabileceğimiz en iyi rakam sistemi hangisidir? Bunu cevaplamak için, bir sayıyı göstermenin optimal yolunun ne olduğuna (sayıyı oluşturan basamakların sayısı) ve rakam sisteminin kullandığı basamak sayısına – tabana karar vermelisiniz. Matematiksel olarak kanıtlanabilir ki, gösterimin uzunluğu ile kullanılan basamak sayısı arasındaki en iyi oran doğal logaritma tabanı olan Euler numarasını (e = 2,718281828) kullanarak gerçekleştirilir.
Böylesine bir e tabanlı sistemde çalışmak son derece zahmetli ve kullanışsızdır, çünkü bu sayıyı iki doğal sayının bir oranı olarak ifade edemezsiniz. Bu bize rakam sisteminin optimal tabanının 2 yada 3 olduğu sonucuna götürür.
3 tabanı teknik uygulama için uygun olmadığı için, ikili taban pratikte kullanım için en uygun olan sayı sistemidir ve modern bilgisayarlar ve elektronik cihazlarda kullanılmaktadır.

8.2.2 Konumsal Sayı Sistemleri
Konumsal sayı sisteminde basamakların konumları sayı değeri için önemlidir. Sayıdaki basamakların değeri tam anlamıyla tanımlı değildir ve verilen rakamın hangi pozisyonda olduğuna bağlıdır. Örneğin, 351 sayısındaki 1 basamağı ile 1024 sayısındaki 1 basamağı farklı değerlere sahiptir. Önceki sayıda 1 değerine, sonraki sayıda 1000 değerine sahiptir. Sayı sistemlerindeki tabanın sadece konumsal sayı sistemlerinde uygulanabilir olduğunu belirtmeliyiz. Konumsal bir sayı sisteminde A(p) sayısını A(p) = (a(n)a(n-1)…a(0),a(-1)a(-2)…a(-k)) şu şekilde temsil edilebiliriz:

Bu toplamda sayının m.inci basamağı için Tm bir ağırlık faktörünü belirtir. Çoğu durumda Tm = Pm, yani:


Yukarıdaki toplam kullanılarak oluşturulan A(p) sayısı sırası ile tamsayı ve ondalık kısımlardan oluşur: (a(n)a(n-1)…a(0)) ve (a(-1)a(-2)…a(-k)). Bu ifadedeki her a, doğal sayılardan oluşan bir M={0, 1, 2, …, p-1} çokluğuna aittir. Konumsal sayı sistemlerinde her basamağın değerinin bir önceki basamaktan sistem tabanının bir katı kadar daha büyük olduğunu kolayca görebilirsiniz (sağa doğru olan basamaktan, yani alt seviyedeki basamak). Bunun doğrudan bir sonucu da şudur: Tabandan daha büyük bir rakamı temsil etmemiz gerekiyorsa bulunduğumuz basamaktan sola bir basamak daha eklememiz gerekmektedir. 2, 8, 10 ve 16 tabanlarındaki sistemler bilgi işlem cihazlarında yaygın halde kullanılmaktadır. Aşağıdaki tabloda 0-15 arasındaki sayıların bu sayı sistemlerindeki gösterimlerini bulacaksınız:

İkili

Sekizli

Onluk

Onaltılık

0000

0

0

0

0001

1

1

1

0010

2

2

2

0011

3

3

3

0100

4

4

4

0101

5

5

5

0110

6

6

6

0111

7

7

7

1000

10

8

8

1001

11

9

9

1010

12

10

A

1011

13

11

B

1100

14

12

C

1101

15

13

D

1110

16

14

E

1111

17

15

F



8.2.3 Konumsal Olmayan Sayı Sistemleri
Konumsal sayı sistemlerinin yanı sıra, konumsal olmayan sayı sistemleri de vardır. burada her basamağın değeri bir sabittir ve sayının içindeki konuma kesin olarak bağlı değildir. Roma ve Yunan sayı sistemleri böyle sayı sistemlerindendir. Konumsal olmayan tüm sayı sistemlerinin ortak bir dezavantajı vardır – büyük sayıların temsili çok zordur. Bu sakıncanın bir sonucu olarak, sadece sınırlı kullanım bulmuşlardır. Bu genellikle sayıların değerini belirlerken yanlışlıklara yol açabilir. Roma ve Yunan sayı sistemlerine çok kısa olarak bir bakacağız.

8.2.3.1 Roma Sayı Sistemi
Romen rakamıyla sistem sayıları temsil etmek için aşağıdaki sembol dizileri kullanılır:

Romen Basamağı

Ondalık Değeri

I

1

V

5

X

10

L

50

C

100

D

500

M

1000



Daha önce belirtildiği gibi, bu rakam sistemi içinde basamak konumunun sayı değeri için hiçbir önemi yoktur ve sayı değerini belirlemede aşağıdaki kurallar uygulanır:


    1. Ardışık iki Roma rakamının birinci değeri ikinci değere eşit yada daha büyükse bu iki değer eklenir. Örneğin:

III sayısının değeri = 3, ancak MMD sayısının değeri = 2500.

    1. Ardışık iki Roma rakamının birinci değeri ikinci değerden daha küçükse bu iki değer çıkarılır. Örneğin:

IX sayısının değeri = 9, ancak MXL sayısının değeri = 1040 ve MXXIV sayısının değeri = 1024.


8.2.3.2 Yunan Sayı Sistemi
Yunan sayı sistemi beşli gruplamanın yapıldığı bir ondalık sistemdir. Aşağıdaki basamakları kullanır:



Yunan Basamağı

Ondalık Değer

Ι

1

Г

5

Δ

10

Η

100

Χ

1,000

Μ

10,000


Tabloda görebileceğiniz gibi, 1 dikey çizgi ile temsil edilmekte,  5, Г harfi ile, ve 10’un üsleri kendilerine karşılık gelen Yunan sözcüğünün ilk harfi ile temsil edilmektedir.
Bu sistemdeki sayılardan bazı örnekler aşağıda verilmiştir:

  • ΓΔ = 50 = 5 x 10

  • ΓH = 500 = 5 x 100

  • ΓX = 5000 = 5 x 1,000

  • ΓM = 50,000 = 5 x 10,000



8.2.4 İkili Sayı Sistemi – Bilgisayar Teknolojisinin Temeli
İkili sayı sistemini kullanarak modern bilgisayar makinelerinde sayılar temsil edilmekte ve işlenmektedir. Bu sistemin yaygınlığını iki kararlı durum cihazlarını uygulamanın çok kolay olması gerçeği ile ve ikili aritmetik cihazların üretim maliyetinin çok düşük olmasıyla açıklayabiliriz.
0 ve 1 ikili basamakları işlem makinelerinde "akım var" ve "akım yok" ile veya "+ 5V" ve "-5V" olarak kolayca temsil edilebilir.
Bu avantajlarla birlikte, bilgisayarlarda sayıların gösterimi için ikili sistem kullanmanın sakıncaları da vardır. Pratikte en büyük kusur ikili sayı sisteminde temsil edilen sayıların çok uzun olmaları, yani çok sayıda bit içermeleridir. Bunun doğal sonucu, insanlar tarafından doğrudan kullanım için elverişli olmamasıdır. Bu dezavantajı önlemek için, daha büyük tabanlarda sistemler pratikte kullanılmaktadır.

8.2.5 Ondalık Sayılar
Ondalık sayı sisteminde temsil edilen sayılar insanlar tarafından kolay anlaşılacak şekilde doğal bir görünüme sahiptir. Bu sayı sisteminin tabanı 10’dur. Temsil edilen basamaklar 10 sayısının katları olarak sıralanmışlardır. Bir ondalık sayının en düşük seviyedeki basamağı (sağdan sola ilk basamak) bir’leri temsil etmek için kullanılır (100 = 1), sonraki basamak on’ları temsil eder (101 = 10), sonraki basamak yüz’leri temsil eder (102 =100), ve bunun gibi devam eder. Başka bir deyişle – izleyen her basamak bir önceki basamaktan 10 kat daha büyük bir değere sahiptir. Farklı basamakların toplamı sayının son değerini belirler. Örnek olarak 95031 sayısını alacağız, ondalık sayı sistemindeki gösterimi aşağıda verilmiştir:
95031 = (9×104) + (5×103) + (0×102) + (3×101) + (1×100)
Bu şekilde temsil edildiğinde, 95031 sayısı insanlar için doğal bir şekilde anlaşılır, çünkü ondalık sayı sisteminin prensipleri insanlar için temel olarak kabul edilmiştir.



Tartışılan yaklaşımlar, diğer sayı sistemleri için de geçerlidir. Aynı mantık kurgusuna sahiptir, ancak farklı tabanlı bir sisteme uygulanabilir. Örneğin, ayrıntılı olarak biraz sonra tartışacağımız ikili ve onaltılık sayı sistemleri için de geçerlidir.



8.2.6 İkili Sayılar
İkili sayı sistemi içinde gösterilen sayılar, ikincil olarak hesap yapan makineler için kolay anlaşılırdır. İnsanlar tarafından biraz daha zor anlaşılır. İkili sayıları temsil etmek için tabanı 2 olan ikili rakam sistemi kullanılır. Bu sayı sisteminde basamaklar 2’nin üsleri olarak konumlandırılmıştır. Gösterimlerinde sadece 0 ve 1 basamakları kullanılır.
Genellikle, ondalık olmayan bir sayı sisteminde bir sayı temsil edildiğinde taban sayının yanında parantez içinde bir endeks olarak yazılır. Örneğin 1110(2) gösteriminde ikili sayısal sistemde bir sayı gösterilmiştir. Hiçbir sayı sistemi açıkça belirtilmemişse, sayının ondalık sistemde olduğu kabul edilir. Basamaklar soldan başlayarak sağa doğru okunarak (en yüksek seviyeli basamaktan en düşük seviyeli basamağa doğru) telaffuz edilir.

Ondalık sayılarda olduğu gibi, sağdan sola doğru okunan her ikili basamak konumuna uygun şekilde 2’nin bir üssü olarak temsil edilir. İkili sayının en düşük seviyeli basamağı (20=1) konumuna karşılık gelir, ikinci basamağı (21=2) konumuna karşılık gelir, üçüncü basamağı (22=4) konumuna karşılık gelir, ve bunun gibi devam eder. Sayı 8 bit uzunluğunda ise, son bit yedinci üstür (27=128). Sayı 16 bit uzunluğunda ise, son bit onbeşinci kuvvettir. 8 ikili basamak (0 ya da 1) kullanarak 256 sayı temsil edebiliriz, çünkü (28=256). 8 ikili basamak kullanarak 65536 sayı temsil edebiliriz, çünkü (216=65536).
İkili rakam sistemindeki sayıların bazı örneklerine bakalım. 148 ondalık sayısını ele alalım. Üç basamaktan oluşur: 1, 4 ve 8 ve aşağıdaki ikili sayı ile temsil edilir:
10010100(2)

148 = (1×27) + (1×24) + (1×22)
Sayının tam gösterimi aşağıdaki tabloda verilmiştir:

Sayı

1

0

0

1

0

1

0

0

Üs

27

26

25

24

23

22

21

20

Değer

1×27= 128

0×26= 0

0×25= 0

1×24= 16

0×23= 0

1×22= 4

0×21= 0

0×20= 0



0 ve 1 ’lerden oluşan 8 bit uzunluğundaki diziye bir bayt (byte) denir – sıradan bir sekiz bitlik ikili sayı. 0’dan başlayarak 255’e kadar olan tüm sayılar bir bayt uzunluğunda temsil edilebilir. Çoğu durumda bu yeterli değildir; sonuç olarak çok sayıda birbirini takip eden baytlar büyük bir sayıyı temsil etmek için kullanılabilir. İki bayt, "makine sözcüğü"nü (word) oluşturur, (16-bit bilgi işlem makinelerinde) 16 bit uzunluğundadır. Bunun yanı sıra, bilgisayar makineleri 32 bit’e karşılık, çift sözcük (double word) ya da dword kullanır.



0 ile sonlanan bir ikili sayı çifttir. 1 ile sonlanan bir ikili sayı tektir.



8.2.7 İkili Sayı Sisteminden Ondalık Sisteme Dönüştürme
İkili sayı sisteminden ondalık sisteme geçerken, ikili sayıdan ondalık sayıya bir dönüşüm yapmak zorundayız. Bir dizi işlem gerçekleştirerek her sayı sisteminden bir sayıyı diğer bir sayı sistemine dönüştürebilirsiniz. Daha önce belirtildiği gibi, ikili sistemde sayılar, 2’nin üsleri olarak konumlandırılan ikili basamaklardan oluşur. 11001(2) sayısını ele alalım. Ondalığa dönüştürme işlemi aşağıdaki toplam hesaplanarak yapılır:
11001(2) = 1×24 + 1×23 + 0×22 + 0×21 + 1×20 =

= 16(10) + 8(10) + 1(10) = 25(10)

Buradan izleyerek 11001(2) = 25(10) elde edilir.
Diğer bir deyişle – her ikili rakam 2’nin bir üssü ile çarpılarak elde edilmiştir. Bu üs basamağın konumunu belirten sayıdır. Sonunda ikili sayının ondalık değerini elde etmek için ikili basamaklarda konumlanan tüm sayıların değerleri toplanır.

8.2.7.1 Horner Şeması
Dönüşüm için bir başka yöntem Horner Şeması olarak bilinmektedir. Bunu kullanırken, en soldaki basamak 2 ile çarpılır ve sağdaki basamağa eklenir. Bu sonuç iki ile çarpılır ve sağdaki komşu basamağa eklenir. Sayının tüm basamakları tükenene kadar bu tekrarlanır ve son basamak çarpma olmadan eklenir. Bu yöntemin uygulanmasına bir örnek aşağıda verilmiştir:
1001(2) = ((1 × 2 + 0) × 2 + 0) × 2 + 1 = 2 × 2 × 2 + 1 = 9

8.2.8 Ondalık Sistemden İkili Sayı Sistemine Dönüştürme
Ondalık sistemden ikili sisteme geçerken, ondalık sayıyı ikili sayıya dönüştürürüz. Bunu gerçekleştirmek için, sayıyı 2 ile böler ve kalanını alırız. Bölüm ve kalanı ayrı ayrı hesaplamalıyız.
Örnek sayı olarak tekrar 148 sayısını kullanalım. Dönüştürmeyi istediğimiz taban tarafından bir tamsayı bölmesi gerçekleştirmek durumundayız (bu durumda taban 2). Bölme sonrasında kalanları kullanarak (her zaman ya 0 yada 1 olacaktır) dönüştürlen sayıyı temsil ederiz. 0 katsayısı elde edilene kadar bölünme devam eder. Bir örnek aşağıda verilmiştir:
148:2=74 kalan 0;

74:2=37 kalan 0;

37:2=18 kalan 1;

18:2=9 kalan 0;

9:2=4 kalan 1;

4:2=2 kalan 0;

2:2=1 kalan 0;

1:2=0 kalan 1;

Bölüm yapıldıktan sonra, kalanlar ters sırada aşağıdaki gibi temsil edilir:
10010100

yani, 148(10) = 10010100 (2)




8.2.9 İkili Sayılarla İşlemler
Toplama, çıkarma ve çarpmanın aritmetik kuralları tek basamaklı ikili sayılar için geçerlidir:
0 + 0 = 0 0 - 0 = 0 0 × 0 = 0

1 + 0 = 1 1 - 0 = 1 1 × 0 = 0

0 + 1 = 1 1 - 1 = 0 0 × 1 = 0

1 + 1 = 10 10 - 1 = 1 1 × 1 = 1



Buna ek olarak, ikili sayılarla mantıksal çarpım (conjunction), mantıksal toplam (disjunction) ve modulo iki toplamı gibi (exclusive or) gibi mantıksal işlemleri de yapabilirsiniz.
Unutmamanız gerekir ki, toplama ve çıkarma yaparken çok-seviyeli sayılarla aritmetik işlem yaparken farklı seviyeler arasındaki bağlantıyı doğru kurmanız gerekir. Bitsel işlemler ile ilgili bazı detaylara göz atalım:
8.2.9.1 Bitsel "and"
Bitsel AND işleci bir sayıdaki belirli bir bit değerini kontrol etmek için kullanılabilir. Örneğin, belirli bir sayının çift olup olmadığını kontrol etmek istiyorsanız, (en düşük seviyedeki bitin 1 olup olmadığını kontrol ederiz):
10111011 AND 00000001 = 00000001
Sonuç 1 ’dir ve sayının tek olduğu anlamına gelir (sonuç 0 olsaydı, sayı çift olacaktı).
C# dilinde bitsel "AND" & ile temsil edilir ve kullanımı aşağıda verildiği gibidir:


int result = integer1 & integer2;



8.2.9.2 Bitsel "or"
Bitsel OR işleci, örneğin belirli bir biti 1’e yükseltmek için kullanılabilir.
10111011 OR 00000100 = 10111111
C# dilinde bitsel "OR" | ile temsil edilir ve kullanımı aşağıda verildiği gibidir:

int result = integer1 | integer2;



8.2.9.3 Bitsel "exclusive or"
Bitsel XOR işlecinde – ikili her basamak ayrı ayrı işlem görür. Bu işlemlerin her biri için ikinci işlenen 0 ise, ilk işlenenin değeri sonuca kopyalanır. İkinci işlenenin 1 olduğu her konumda ise ilk işlenenin karşılık gelen konumunun değeri ters çevrilir ve sonuca bu rakam yazılır.
10111011 XOR 01010101 = 11101110


C# dilinde "exclusive or" işleci ^ ile gösterilir:


int result = integer1 ^ integer2;



8.2.9.4 Bitsel "negation"
Bitsel işleç NOT – tekli bir işleçtir, yani tek bir işlenene uygulandığı anlamına gelir. Verilen ikili sayının her bitini ters değerine çevirir:
1   ...   11   12   13   14   15   16   17   18   ...   31






    Ana sayfa


C# İle biLGİsayar programlama temelleri (C# Programlama Kitabı) Svetlin Nakov & Co

Indir 3.36 Mb.