Bilgisayar programlamayla, matematik arasında çok güçlü bir ilişki vardır. Geçmişe bakarsanız, bilgisayar alanında önemli adımların, hep matematik kökenli insanlar tarafından atıldığını görürsünüz. Bir bilgisayar programcısı için, matematikten uzak durmak düşünülemez.
Bugün ki dersimizde, biraz matematik içersine gireceğiz ve sayı sistemleriyle, Boole Cebiri (Boolean Algebra) konularını ele alacağız.
Genel kabul görmüş sayı sistemleri vardır ve içlerinde en yaygını, hepimizin gündelik hayatta kullandığı 10′luk sayı sistemidir. Yazması, okunması ve iÅŸlem yapması son derece kolay olduÄŸundan bunu daha çocuk yaÅŸta öğrenir ve bu ÅŸekilde sürdürürüz. Ancak bilgisayarlar bizim gibi iÅŸlem yapabilme yetisine sahip deÄŸildir. Onlar için iki ihtimal vardır. Bir ÅŸey ya 1′dir ya da 0. Bunu ikilik sayı sistemi olarak adlandırırız. Yani bizim yazdığımız bütün sayılar, bütün harfler ve aklınıza gelen-gelmeyen bütün iÅŸaretler, bilgisayar için 0 ve 1′in kombinasyonlarından ibarettir. İşte bu yüzden bizlerin, ikilik sayı sistemine hakim olması gerekir.
Sayı sistemlerini genel olarak aşağıdaki gibi ifade edebiliriz:

Â
Burada, N sayı tabanına göstermektedir. k sayının hangi hanesinde olduğumuzu ifade ederken, dk ise, ilgili sayıdaki rakamı temsil eder. Şimdi basit bir örnek yapalım ve ikilik tabandaki 10011 sayısının, 10 tabanındaki eş değerini bulalım:
( d4d3d2d1d0 )2 = ( d0 . 20 ) + ( d1 . 21 ) + ( d2 . 22 ) + ( d3 . 23 ) + ( d4 . 24 )
( 10011 )2 = ( 1 . 20 ) + ( 1 . 21 ) + ( 0 . 22 ) + ( 0 . 23 ) + ( 1 . 24 ) = 19
ikilik sayı sistemi dışında, 16′lık (Hexadecimal) sayı sistemi de oldukça önemli bir baÅŸka tabandır. 16′lık sayı sisteminde, rakamları ifade etmek için 16 adet sembole gereksinim duyarız. Bu yüzden 0 ile 9 arasında olan 10 rakamı kullandıktan sonra, A, B, C, D, E ve F harflerini de rakam olarak deÄŸerlendiririz.
| Decimal |
: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
| Hexadecimal |
: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
Â
Hexadecimal/16′lık sayı tabanıyla ilgili aÅŸağıdaki örneklere göz atalım:
(Â 3FCÂ )16 = ( 3 . 162 ) + ( F . 161 ) + ( C . 160 ) = 768 + 240 + 12 = 1020
(Â 1FA9Â )16 = ( 1 . 163 ) + ( F . 162 ) + ( A . 161 ) + ( 9 . 160 ) = 4096 + 3840 + 160 + 9 = 8105
(Â 75Â )16 = ( 7 . 161 ) + ( 7 . 160 ) = 112 + 5 = 117
16′lık sayı sisteminin diÄŸer bir ismi Hexadecimal olduÄŸundan, bazı yerlerde, bunu ifade etmek için 16 yerine ‘H’ harfi de kullanılabilir:
(Â BA3Â )16Â =Â (Â BA3Â )HÂ ;Â Â (Â A1EÂ )16Â =Â (Â A1EÂ )HÂ gibi…
Tabanlar arasında dönüştürme iÅŸlemi, üzerinde duracağımız bir baÅŸka konudur. Elinizde 16′lık sayı sisteminde bir sayı varsa ve bunu 2′lik sayı sistemiyle yazmak isterseniz önce 10′luk sayı sistemine çevirip daha sonra 2′lik sayı sistemine dönüştürebilirsiniz. Ancak 16′lık ve 2′lik sayı sistemlerini çok daha kolay birbirine dönüştürmeniz mümkündür. AÅŸağıdaki tabloda 16′lık sayı sistemindeki rakamlar ve bunun 2′lik sayı sistemindeki karşılığı verilmiÅŸtir:
| Hexadecimal |
: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
| Binary ( İkilik ) |
: |
0000 |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
Â
Bu durumu bir örnekle şöyle gösterebiliriz:
| (Â A3F1Â )H |
: |
A |
3 |
F |
1 |
| Â |
: |
1010 |
0011 |
1111 |
0001 |
Â
16′lık tabandaki her rakamın, 2′lik tabandaki karşılığını koyduÄŸumuzda yukardaki eÅŸitliÄŸi elde ediyoruz ve buna göre ( A3F1 ) = ( 1010 0011 1111 0001 )2 eÅŸitliÄŸini kurabiliyoruz. (2′lik tabandaki sayıya ait boÅŸluklar, sayının daha rahat okunması için bırakılmıştır.) Bu tarz dönüşümler, 2 ve 2′nin katında olan sayı tabanlarında rahatlıkla yapılabilir.
Hatırlarsanız, deÄŸiÅŸken tiplerinde, iÅŸaretli ve iÅŸaretsiz deÄŸiÅŸken tanımlamalarından bahsetmiÅŸtik. Åžimdi olayın biraz daha derinine inelim. Bir char, 1 byte alan kaplar ve 1 byte, 8 bit’ten oluÅŸur. AÅŸağıdaki kutuların her birini bir bit ve kutuların oluÅŸturduÄŸu bütünü bir byte olarak düşünün:
| Â a7Â |
 a6 |
 a5 |
 a4 |
 a3 |
 a2 |
 a1 |
 a0 |
Â
Yukardaki kutuların toplamı olan bir byte, char deÄŸiÅŸkeninin kapladığı alanı temsil etmektedir. Pozitif sayıları ifade etmeyi zaten öğrenmiÅŸtik. Sayının karşılığını, 2′lik tabanda yazarak, gerekli sonuca ulaşırız. Ancak sayımız Negatif deÄŸerliyse, iÅŸler biraz farklılaşır. Burada devreye iÅŸaret biti (sign bit) devreye girer. Yukardaki ÅŸekilde, diÄŸer kutulardan farklı renkte olan a7 iÅŸaret bitidir. Özetle, a7 0 ise, sayı pozitiftir. EÄŸer a7 1 ise, sayı negatiftir.
İkilik tabandaki iÅŸaretli bir sayının, 10′luk tabandaki karşılığını ÅŸu ÅŸekilde bulabiliriz:
( a7a6a5a4a3a2a1a0 )2 = ( a7 . -27 ) + ( a6 . 26 ) + ... + ( a1 . 21 ) + ( a0 . 20 )
İkilik tabanda yazılmış ( 10000011 )2 sayısı, iÅŸaretsiz olarak düşünülürse, 131′e eÅŸittir. Ancak iÅŸaretli bir sayı olduÄŸu düşünülürse, karşılığı, -125 olacaktır. Konunun pekiÅŸmesi açısından aÅŸağıdaki örneklere göz atabilirsiniz:
* ( 1011 1011 )2 = -69 (Sayı işaretliyse)
( 1011 1011 )2 = 187 (Sayı işaretsizse)
* ( 1100 1101 )2 = -51 (Sayı işaretliyse)
( 1100 1101 )2 = 205 (Sayı işaretsizse)
* ( 0110 1101 )2 = 109 (Sayı işaretliyse)
( 0110 1101 )2 = 109 (Sayı işaretsizse)
Negatif bir sayının 2′lik tabandaki karşılığını bulmak için, önce (i) sayıyı pozitif olarak ikilik tabanda yazarız. Daha sonra, (ii) ikilik tabanda yazılmış sayının 1 yazan rakamları 0, 0 yazan rakamları 1′e çevrilir. Son olarak (iii) çıkan sayıya, 1 eklenir. Bu size istediÄŸiniz sayının ikilik tabanındaki eÅŸini verecektir. Åžimdi bir uygulama yapalım ve -7 sayını ikilik tabana çevirmeye çalışalım:
i ) -7 ==> (Â 7Â )10Â =Â (Â 0000Â 0111Â )2
ii ) (Â 0000Â 0111Â ) ==> (Â 1111Â 1000Â )
iii ) (Â 1111Â 1000Â ) + 1 = (Â 1111Â 1001Â ) ==> (Â -7Â )10Â =Â (Â 1111Â 1001Â )2
Yorumlar
Yorum Yok
Yorumunuzu Ekleyin
Yorum eklemek için giris yapmalısınız.