Mikrobilgisayarda Aritmetik
SAYITLAMA DİZGELERİ
Sayıları göstermek (temsil etmek) için tarih boyunca türlü simgeler kullanılmıştır. Konumuz bu tarihi gelişimi incelemek değildir. Kullanılan sayıtlama dizgesi, aritmetik işlemleri çok kolaylaştırabilir ya da zorlaştırabilir. Örneğin, Roma sayaklarıyla çarpma ve bölme işlemlerini yapmayı deneyiniz. Roma sayıtlama dizgesinin aritmetik işlemler yapmaya hiç bir yarar sağlamadığını göreceksiniz. Sayma ve aritmetik işlemler yapma amacıyla insanoğlu uzun zaman içinde büyük uğraş vermiştir. Bu uzun sürecin sonunda, aritmetik işlemleri kolay yapmamızı sağlayan 10 tabanlı sayıtlama dizgesi küresel yaygınlık kazanmıştır. Kuramsal açıdan, herhangi bir r (r>0) tamsayısını taban kabul eden sayıtlama dizgesi kurulabilir.
r tabanlı dizgede bir gerçel sayının temsili, onlu dizgedeki gibidir. Örneğin, (anan-1 … an1an0 . b1b2 … bm )r simgesi şu sayıyı temsil eder.
an r n +an-1 r n-1 +… + a1r1 + a0r 0 + b1r -1 + b2r -2 + … + bmr -m
Buna, verilen sayının r tabanına göre açılımı diyeceğiz. Bazı sayılarda bm lerin sayısı sayılabilir sonsuz olabilir.
r tabanlı sayıtlama dizgesi içinde aritmetik işlemler, 10 tabanlı dizgede olduğu gibi kolayca yapılabilir. Herhangi bir r tabanlı dizgede yazılan sayı, istendiğinde başka bir b tabanlı dizge içindeki temsiline dönüştürülebilir. Dolayısıyla, kuramsal açıdan, sayıları hangi dizgede temsil edersek edelim ve hangi dizge içinde aritmetik işlemler yaparsak yapalım, sonuç aynı olacaktır.
Ancak, kuramsal açıdan birbirlerine denk olmakla birlikte, pratikte bazı işler için özel sayıtlama dizgelerini kullanmak daha uygundur.
10 Tabanlı (Onlu, decimal) Sayıtlama Dizgesi
Günlük yaşamda çoğunlukla sayıları 10 tabanı ile temsil ederiz. İnsanoğlu, parmak sayarak aritmetik yaptığı için, Onlu (10 tabanlı) Sayıtlama Dizgesini kullanmaya alışıktır. Bu dizgenin sayakları (digit) 0,1,2,3,4,5,6,7,8,9 dur.
Örnek: 2718 sayısını düşünelim. Bu bir simgedir ve aşağıdaki toplamı (10 tabanına göre açılımını) temsil eder:
2718 = 2x103 + 7x102 + 1x101 + 8x100 = 2000 + 700 + 10 + 8 .
Başka bir deyişle, 2718 sayısı tabloda kendi sağındaki hanelerin toplamına eşittir.
Örnek: 0.6875 sayısını onlu sayıtlama sistemine göre yazarken, bu sayının içinde 10-n lerden kaçar tane olduğunu buluruz. Bunun için, verilen sayıda önce kaç tane 1/10 olduğunu bulur onu sayıdan çıkarırız. Sonra geriye kalan kısımda kaç tane 1/100 olduğunu bulur, çıkarırız. Sonra geriye kalanda kaç tane 1/1000 olduğunu bulur, çıkarırız.Bu işleme geriye kalan sayı 0 olana kadar devam ederiz. Bu işlem, sayının 10-n lerin bazı katlarının toplamı olarak yazılması demektir.
0.6875 = 6x10-1 + 8x10-2 + 7x10-3 + 5x10-4
= 6/101 + 8/102 + 7/103 + 5/104
= 6/10 + 8/100 + 7/1000 + 5/10000
olur.
Örnek: 0.317 sayısının 10 lu sayıtlama dizgesindeki açılımını yazınız.
0.317 = 3x10-1 + 1x10-2 + 7x10-3
= 3/101 + 1/102 + 7/103
= 3/10 + 1/100 + 7/1000
Örnek: 2317.52 sayısının 10 lu sayıtlama dizgesindeki açılımını yazınız.
2317.52 = 2x10 3 + 3x10 2 + 1x10 1 + 7x10 0 + 5x10 -1 + 2x10 -2
= 2x1000 + 3x100 + 1x10 + 7x1 + 5/10 + 2/100
2 Tabanlı (2 li, binary) Sayıtlama Dizgesi
Sayısal (digital) bilgisayarlar İkili Sayıtlama Dizgesini kullanır. İkili Sayıtlama Dizgesi 2 tabanlı dizgedir; yalnızca 0 ile 1 sayaklarını kullanır. Bu dizgedeki hanelere İngilizce’de bit denilir. Bu sözcük, Binary digIT deyiminden türetilmiştir. Bilgisayarın elektronik devrelerinde 0 bit’i alçak voltaj, 1 bit’i ise yüksek voltaj ile temsil edilir.
İkili Sayıtlama Dizgesi’nin yapısı onlu sayıtlama dizgesi gibidir; yani sayılar bitlerin yer aldığı haneye göre değer alır. Bunu daha iyi anlamak için, herhangi bir sayının onlu sayıtlama dizgesindeki yazılışını anımsayalım.
|
10 un kuvvetleri |
103 |
102 |
101 |
100 |
|
Hane değeri |
1000 |
100 |
10 |
1 |
|
2718 |
2x103 |
7x102 |
1x101 |
8x100 |
|
2718 |
2000 |
700 |
10 |
8 |
olur. Aynı işi, 10 nun kuvvetleri yerine, 2 nin kuvvetlerini kullanarak yapalım.
|
2k |
211 |
210 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
|
|
2048 |
1024 |
512 |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
2718 |
1x211 |
0x210 |
1x29 |
0x28 |
1x27 |
0x26 |
0x25 |
1x24 |
1x23 |
1x22 |
1x21 |
0x20 |
|
2718 |
2048 |
0 |
512 |
0 |
128 |
0 |
0 |
16 |
8 |
4 |
2 |
0 |
O halde, 2718 sayısının 2 tabanına göre açılımını yazarsak
(101010011110)2 = 1x211 + 0x210 + 1x29 + 0x28 + 1x27 + 0x26 + 0x25 + 1x24 + 1x23 + 1x22 + 1x21 + 0x20
= 2048 + 512 + 128 + 16 + 8 + 4 + 2
= 271810
olacaktır. Görüldüğü gibi, onlu sayıtlama dizgesinde yapıldığı gibi 2 li sayıtlama dizgesinde de sayakların basamak değerleri (place value) vardır. Bunları sağdan sola doğru sıralarsak
1 ler basamağı,
2 ler basamağı,
4 ler basamağı
8 ler basamağı,
16 lar basamağı,
32 ler basamağı,
64 ler basamağı,
128 ler basamağı,
256 lar basamağı,
512 ler basamağı,
1024 ler basamağı,
2048 ler basamağı,
...
olacaktır. Bu yöntemle bütün doğal sayıları yazabileceğimiz açıktır.
Örnek: 11012 sayısının açılımını yazınız.
11012 = 1x23 + 1x22 + 0x21 + 1x20
= 1x8 + 1x4 + 0x2 + 1x1
= 8 + 4 + 0 + 1
= 1310
Kesirli sayıların ikili sayıtlama dizgesindeki temsillerini açıklayabilmek için, önce (0,1) aralığındaki sayıları 10-lu sayıtlama dizgesinde nasıl yazdığımızı anımsayalım.
Örnek: 0.01012 sayısının açılımını yazınız.
0.01012 = 0x2-1 + 1x2-2 + 0x2-3 + 1x2-4
= 0/2 + 1/4 + 0/8 + 1/16
= (5/16)10
Bir tabana göre yazılmış bir sayıyı başka bir tabana göre yazmak için, sayının istenen tabana göre açılımını yazmak yetecektir. Bunu bazı örneklerle açıklayalım.
10 tabanına göre yazılmış bir sayıyı 2 tabanına dönüştürmek için, verilen sayıda 2 nin hangi kuvvetlerinin kaçar tane bulunduğunu saptayıp, 2 nin artan kuvvetlerine göre açılımı yazmak yetecektir.
Verilen sayı tamsayı ise
Sayıyı 2 ye bölüp kalanı saptamak ve sonra bölüm için aynı işi yaparak bölüm 0 oluncaya kadar bu işe devam etmek gerekir. Birinci adımda kalan 1 ler hanesine, ikinci adımdaki kalan 2 ler hanesine, üçüncü adımdaki kalan 4 ler hanesine vb. yazılır.
Örnek: 7110 sayısını 2 tabanına göre yazınız.
71 : 2 = 35 1
35 : 2 = 17 1
17 : 2 = 8 1
8 : 2 = 4 0
4 : 2 = 2 0
2 : 2 = 1 0
1 : 2 = 0 1
Ohalde 7110 = (1000111)2 dir.
Verilen sayı kesirli sayı ise
Kesirli sayıları yazmak için (0,1) aralığındaki sayıları 10-lu sayıtlama dizgesinde nasıl yazdığımızı anımsayalım ve ikili dizgede benzer usavurmayı yapalım.
Sayıyı 2 ile çarpar, çarpımın tam kısmını ayırırız. Kalan kesri tekrar 2 ile çarpar, çarpımın tam kısmını ayırırız. Aynı işleme, kesirli kısım 0 oluncaya kadar ya da yeterince ardışık işlem yaparak istenen yaklaşık sayı bulununcaya kadar devam etmek gerekir. Birinci adımdaki tam kısım ½ ler hanesine, ikinci adımdaki tam kısım ¼ ler hanesine, üçüncü adımdaki tam kısım 1/8 ler hanesine vb. Yazılır.
1.Durum: Kesirli sayı 2 nin negatif kuvvetlernin sonlu toplamı olarak yazılabiliyorsa.
2 li sayıtlama dizgesinde de aynı yöntem kullanılır. Yukarıdaki 0.6875 sayısını 2 tabanına göre yazmak için, bu sayı içinde kaç tane 1/2, kaç tane 1/2 2 , kaç tane 1/2 3 , kaç tane 1/2 4 , kaç tane 1/2 5 ...vb olduğunu bulmalıyız.
0.6875 = 1x2 -1 + 0x2 -2 + 1x2 -3 + 1x2 -4
= 1x(1/2) + 0x(1/4) + 1x(1/8) + 1x(1/16)
= (1011)2
2.Durum: Kesirli sayı 2 nin negatif kuvvetlerinin sonlu toplamı olarak yazılamıyorsa (sonsuz toplam).
Örnek: (0.317)10 sayısını 2 tabanına göre yazınız.
0.317 x 2 = 0.634 0
0.634 x 2 = 1.268 1
0.268 x 2 = 0.536 0
0.536 x 2 = 1.072 1
0.072 x 2 = 0.144 0
0.144 x 2 = 0.288 0
0.288 x 2 = 0.576 0
0.576 x 2 = 1.152 1
0.152 x 2 = 0.304 0
... ...
Ohalde (0.317)10 (0.010100010...)2 dir.
Bu kez, sayıyı 2-n nin katlarının sonlu toplamı şeklinde yazamadığımızı görüyoruz. Bu, 10 lu dizgede sonsuz ondalıklı temsillere benzer. Bu durumda, yeterince basamak yazarak, asıl sayıya istediğimiz kadar yakın 2 li bir temsil elde edebiliriz.
Örnek: (0.7215)10 sayısını 2 tabanına göre yazınız.
0.7215 x 2 = 1.4430 1
0.4430 x 2 = 0.8860 0
0.8860 x 2 = 1.7720 1
0.7720 x 2 = 1.5440 1
0.5440 x 2 = 1.0880 1
0.0880 x 2 = 0.1760 0
0.1760 x 2 = 1.3520 0
0.3520 x 2 = 0.7040 0
0.7040 x 2 = 1.4080 1
Ohalde (0.7215)10 (0.101110001)2 dir.
Sayının tam ve kesirli kısımları varsa, tam ve kesirli kısımlar ayrı ayrı dönüştürülür ve sonra ikisi birleştirilir.
Örnek: (41.6875)10 sayısını 2 tabanına göre yazınız.
41 : 2 = 20 1
20 : 2 = 10 0
10 : 2 = 5 0
5 : 2 = 2 1
2 : 2 = 1 0
1 : 2 = 0 1
Ohalde 4110 = (101001)2 dir. Öte yandan,
0.6875 x 2 = 1.3750 1
0.3750 x 2 = 0.7500 0
0.7500 x 2 = 1.5000 1
0.5000 x 2 = 1.0000 1
Ohalde (41.7215)10 (101001.1011)2 dir.
İkiliden onluya dönüşüm
2 tabanına göre yazılmış bir sayıyı 10 tabanına göre yazmak için, 2 tabanına göre açılımını yazar ve ortaya çıkan terimleri toplarız.
Örnek: (1010.011) 2 = 1x23 + 0x22 + 1x21 + 0x2-1 + 1x2-2 + 1x2-3
= 23 + 21 + 2-2 + 2-3
= (10.375)10
Sekizliden onluya dönüşüm
Örnek: (630.4) 8 = 6x82 + 3x81 + 4x8-1 + 0x2-1 + 1x2-2 + 1x2-3
= 23 + 21 + 2-2 + 2-3
= (10.375)10
Onlu dizgeden sekizli dizgeye dönüşüm
Örnek: (153)10 sayısını sekizli dizgeye dödüştürünüz.
153 : 8 = 19 1
19 : 8 = 2 3
2 : 8 = 0 2
Ohalde
(153)10 = (231)8
dir.
Örnek: (0.513)10 sayısını sekizli dizgeye dönüştürünüz.
0.513 x 8 = 4.104 4
0.104 x 8 = 0.832 0
0.832 x 8 = 6.656 6
0.656 x 8 = 5.248 5
0.248 x 8 = 1.984 1
0.984 x 8 = 7.782 7
... ...
Ohalde (0.512)10 (0.406517...)8 dir. Bu sonuç virgülden sonraki 7 basamağa kadar duyarlıdır. İşlem yürütülerek istenen ince duyarlık sağlanabilir.
r tabanlı gösterimden onlu gösterime dönüşüm
Verilen sayının r tabanına göre açılımı yazılır ve ortaya çıkan terimler toplanır.
İkili sayıtlama dizgesinde dört işlem, aynen onlu dizgede olduğu gibi yapılır.
0 0 1 00111011 59
0 1 1 00101010 42
+____ +______ +_____ +___________ +_______
0 1 10 01100101 101
0 1 1 0 01010101 85
0 1 0 1 00111001 57
-____ -______ -_____ -_____ -___________ -_____
0 0 1 0 00011100 28
0 1 1 0 1101 13
0 1 0 1 101 5
x____ x______ x_____ x_____ x___________ x_____
0 1 0 0 1101 65
0000
1101
+___________
1000001
110111 101
________
101 1011
00111
101
-______
0101
101
-_______
000
Bilgisayarda Çıkarma İşlemi
İkili sayıtlama dizgesinde elle yapılan dört işlemi onlu dizgedekine benzer olarak yapabiliyoruz. Bilgisayardaki bütün işlemler ikili sayıtlama sisteminde gerçekleşir. Toplama işlemi, yukarıda elle yaptığımız esasa dayanır. Ancak, mikrobilgisayarlarda çıkarma işlemini yapacak devre yoktur; devreler tümleme (complement, negation) ve artırma (increment, 1 ekleme) işlemlerini yapabilir. Dolayısıyla çıkarma işlemini veya daha genel olarak, işaretli sayılarda aritmetik işlemlerini yaparken, negatif sayıların ikilere tümleyenlerini (twos complement) kullanırlar. Bunun yanında, çoğu mikrobilgisayarlarda dört işlemi hızlı yapacak özel devreler vardır.
Çıkarma işleminin tümleme ve toplama işlemleri ile nasıl yapıldığını daha iyi anlamak için, bunu önce alışık olduğumuz onlu sayıtlama dizgesinde deneyelim. 0,1,2,3,4,5,6,7,8,9 sayaklarından herhangi birisinin 10 a (tabana) tümleyeni, 10 ile arasındaki farktır. Benzer şekilde, 9 a tümleyenleri ise, 9 ile aralarındaki farktır. Örneğin 7 sayağının 10 a tümleyeni (10-7=3), ve 9a tümleyeni ise (9-7=2) olur. Şimdi aşağıdaki örnekleri düşünelim:
Örnek:
7 - 4 = 7 + 10 -4 - 10
= 7 + (10 – 4) - 10
= 7 + 6 - 10
= 13 – 10
şeklinde yazalım. Son satırdaki çıkarma işlemini yapmak için, 13 sayısının en solundaki hanesinin atılmasının yeterli olduğunu düşünmek yetecektir.
Örnek:
67 – 15 = 67 +100 – 15 – 100
= 67 + (100 – 15) – 100
= 67 + 85 – 100
= 152 – 100
= 52
İkinci satırdaki (100-15) = 85 sayısına 15 in 100 e tümleyeni diyelim. Bu sayıyı çıkarma işlemiyle elde etmek yerine, sonucu bir tümleme ve bir toplama işlemiyle bulabiliriz. Gerçekten, 15 sayısının basamaklarının 9 a tümleyenleri (9-5=4) ve (9-1=8) dir. Bunları ait oldukları basamaklara yazarsak, 84 sayısı bulunur. Şimdi buna 1 ekleyelim: 84 + 1 = 85 elde edilir. Demek ki, 15 sayısının basamaklarının her birisinin yerine, 9 a tümleyenlerini yazıp ortaya çıkan sayıya 1 ekleyince, 15 sayısının 100 e tümleyeni (100-15=85) bulundu. Bunu yaparken, çıkarma işlemini kullanmadığımıza dikkat ediniz. Şimdi, yukarıdaki çıkarma işlemine dönelim. Üçüncü satırdaki 67+85 ifadesi, eksilen sayıya çıkan sayının 100 e tümleyeninin eklenmesinden başka bir şey değildir. O halde, dördüncü satırdaki 152 sayısını bir tümleme ve iki toplama işlemiyle elde etmiş oluyoruz. Son satırdaki 52 sonucuna ulaşmak için, 152-100 çıkarma işlemi gerekiyor. Çıkarma işlemi yapamayan bilgisayarımız, 152 nin yazılı olduğu almaçtan (register) en sol hanedeki 1 sayısını silebilir; ki bu istediğimiz sonucu verir.
Yukarıdaki algoritma iki basamak yerine başka basamaklı işlemlere de uygulanır. Örneğin, 1 basamaklı işlemlerde 10 a, iki basamaklı işlemlerde 100 e, üç basamaklı işlemlerde 1000 e, ... tümleme yapılır. Genel kural olarak, tümleme işlemi, işlemdeki basamak sayısının bir üst basamağına yapılır.
Şimdi yukarıdaki algoritmayı ikili sayıtlama dizgesinde yapalım. Elle yapılan işlem aşağıdaki gibidir.
67 = 1 0 0 0 0 1 1
15 = 0 0 0 1 1 1 1
-__________ -_______________
= 0 1 1 0 1 0 0
Şimdi bunu bilgisayarın nasıl yaptığını gösterelim:
9 a tümlemede yaptığımız gibi, 15 sayısının ikili sayıtlama sisteminde birlere tümleyeni, basamak sayılarının 1 den çıkarılmasıyla elde edilir. (1-1=0) ve (1-0=1) olduğundan, 15 in ikili temsilindeki 1 ler yerine 0 ve 0 lar yerine 1 koymak yetecektir:
15 in birlere tümleyeni (15)’ = 1 1 1 0 0 0 0
1
+___________________________________________________
(15)’ + 1 = 1 1 1 0 0 0 1
Şimdi bunu eksilen sayıya, yani 67 ye ekleyelim:
67 = 1 0 0 0 0 1 1
(15)’+1 = 1 1 1 0 0 0 1
-__________ -_______________
= 1 0 1 1 0 1 0 0
Bulduğumuz toplamda en soldaki basamağı atalım.
0 1 1 0 1 0 0
sayısını elde ederiz. Bu ise 52 ye eşittir ve aradığımız farktır.
Özetlersek, bir çıkarma işleminde, çıkan sayının birlere tümleyenine bir eklenir ve bulunan sayı eksilen sayı ile toplanır. Toplamın en solundaki basamak atılır. Geriye kalan sayı çıkarma işleminin sonucudur.
Örnekler:
0101 1010 1011
101010 010101 1100
1010100 0101011 0101111
Çarpma işlemi ardışık toplamlarla, bölme işlemi ise ardışık çıkarmalarla yapılabilir. Bu işleri hızlı yapmak için, almaçtaki basamakların sola ya da sağa kaydırılması pratik bir uygulamadır. Yerimiz elvermediği için, bu ayrıntılara burada giremeyeceğiz. Aritmetik ve mantık işlemlerini yapmak için, özel devreli chiplerin yapıldığını da söylemek gerekir. Tabii, bütün bu tasarımlar ikili sayıtlama dizgesindeki aritmetiğe, yani matematiğe dayalıdır.
8-bitlik yazmaca (register) sahip bir mikroilgisayarda işaretli sayıların nasıl yazıldığını inceleyelim.
8-bitlik bir yazmaçta (register), haneler sağdan sola doğru
7 6 5 4 3 2 1 0
|
|
|
|
|
|
|
|
|
diye numaralanır. 7-inci hane işaret hanesidir. Pozitif sayılar için 0, negatif sayılar için 1 değerini alır. Buna göre, 8-bitlik bir yazmaca sığabilecek en büyük pozitif tamsayı
0111 1111 = 26 + 25 + 24 +23 + 22 + 21 + 20 = 64 + 32 + 16 + 8 + 4 + 2 + 1 = +127
dir. İşaretli sayıların 8-bitlik bir yazmaçta temsil edilme biçimleri aşağıdaki tabloda gösterilmiştir. Pozitif sayılar olduğu gibi yazılır, negatif sayılar ise ikilere tümleyen biçimleriyle yazılır.
Decimal |
Yazmaçtaki Temsili |
Açıklama |
|
|
+127 |
0111 1111 |
İkili Temsil |
|
|
+126 |
0111 1110 |
İkili Temsil |
|
|
… |
… |
… |
|
|
+8 |
0000 1000 |
İkili Temsil |
|
|
+7 |
0000 0111 |
İkili Temsil |
|
|
+6 |
0000 0110 |
İkili Temsil |
|
|
+5 |
0000 0101 |
İkili Temsil |
|
|
+4 |
0000 0100 |
İkili Temsil |
|
|
+3 |
0000 0011 |
İkili Temsil |
|
|
+2 |
0000 0010 |
İkili Temsil |
|
|
+1 |
0000 0001 |
İkili Temsil |
|
|
+0 |
0000 0000 |
İkili Temsil |
|
|
-1 |
1111 1111 |
İkilere Tümleyeni |
|
|
-2 |
1111 1110 |
İkilere Tümleyeni |
|
|
-3 |
1111 1101 |
İkilere Tümleyeni |
|
|
-4 |
1111 1100 |
İkilere Tümleyeni |
|
|
-5 |
1111 1011 |
İkilere Tümleyeni |
|
|
-6 |
1111 1010 |
İkilere Tümleyeni |
|
|
-7 |
1111 1001 |
İkilere Tümleyeni |
|
|
-8 |
1111 1000 |
İkilere Tümleyeni |
|
|
… |
… |
… |
|
|
-127 |
1000 0001 |
İkilere Tümleyeni |
|
|
-128 |
1000 0000 |
İkilere Tümleyeni |
|
Bu tabloyu kullanarak, çıkarma işlemini, çıkan sayının ikilere tümleyeniyle toplama işlemine dönüştürebiliriz. Böylece, çıkarma işlemini yapan devrenin olmayışının yarattığı eksiklik kolayca giderilmiş olur.
Örnek :
+5 0000 0101
+3 0000 0011
+_________ +_____________
+8 0000 1000
Örnek :
+7 0000 0111
-3 1111 1101
+_________ +_______________
+4 1 0000 0100
İkili temsilde yazmacı taşan en soldaki 1 sayağı atılır.
Örnek :
+3 0000 0011
-8 1111 1000
+_________ +_______________
-5 1111 1011
Örnek :
-2 1111 1110
-5 1111 1011
+_________ +_______________
-7 1 1111 1001
İkili temsilde yazmacı taşan en soldaki 1 sayağı atılır.
Örnek :
+8 0000 1000
- 5 1111 1011
+_________ +_______________
+3 1 0000 0011
İkili temsilde yazmacı taşan en soldaki 1 sayağı atılır.
Örnek :
+2 0000 0010
-6 1111 1010
+_________ +_______________
-4 1 1111 1100
İkili temsilde yazmacı taşan en soldaki 1 sayağı atılır.
Örnek :
+89 0101 1001
- 46 1101 0010
+_________ +_______________
+4 1 0010 1011
İkili temsilde yazmacı taşan en soldaki 1 sayağı atılır.
Örnek :
+20 0001 0100
- 60 1100 0100
+_________ +_______________
- 40 1 1101 1000
İkili temsilde yazmacı taşan en soldaki 1 sayağı atılır.
Aşağıdaki tabloda sayıtlama dizgelerinin sayakları listelenmiştir.
|
Hexadecimal Decimal Octal Binary |
|
|
|
0 0 0 0000 |
|
1 1 1 0001 |
|
2 2 2 0010 |
|
3 3 3 0011 |
|
4 4 4 0100 |
|
5 5 5 0101 |
|
6 6 6 0110 |
|
7 7 7 0111 |
|
8 8 10 1000 |
|
9 9 11 1001 |
|
A 10 12 1010 |
|
B 11 13 1011 |
|
C 12 14 1100 |
|
D 13 15 1101 |
|
E 14 16 1110 |
|
F 15 17 1111 |
Sayıtlama Dizgelerinin Karşılaştırılması
Octal ve hexadecimal sayıları binary gösterimlerinde kolay okuyup yazmak için onları, sırasıyla 3-erli ve 4-erli gruplara ayırmak uygun olur.
Örnek :
Octal dizgedeki (6754)8 sayısının binary temsili 110111101100 dir. Bunu kolay yazmak için, binary temsilini, sağdan başlayarak 3-erli gruplara ayıralım.
|
110 111 101 100 = 67548 |
|
6 7 5 4 |
olur.
Örnek :
Hexadecimal dizgedeki (DEC)16 sayısının binary temsili 110111101100 dır. Bunu kolay yazmak için, binary temsilini, sağdan başlayarak 4-erli gruplara ayıralım.
|
1101 1110 1100 = DEC16 |
|
D E C |
olur.
Sekizli (octal) ve onaltılı (hexadecimal) sayıların gösterimi
23 = 8 ve 24 = 16 olduğu ve ana bellekte adres büyüklükleri 8 ya da 16 bit’ten oluştuğu zaman, sekizli ve onaltılı sayıların ikiliye dönüşümü ve ikiliden bunlara dönüşüm pratik bir rol oynar.
Bu dönüşümü kolaylaştırmak için, sayıların ikili gösterimlerini, sırasıyla, 3 erli ve 4 erli hanelere ayırmak uygun olur.
Örnek:
|
(26153.7406) 8 = ( 10 110 001 101 011 . 111 100 000 110 ) 2 |
|
2 6 1 5 3 . 7 4 0 6 |
Örnek: İkiliden onaltılıya dönüşüm.
|
( 10 1100 0110 1011 . 1111 0010 )2 = ( 2C6B.F2 )16 |
|
2 C 6 B . F 2 |
Örnek: Sekizliden ikiliye dönüşüm.
|
( 673.124 ) 8 = ( 110 111 011 001 . 001 010 100 ) 2 |
|
6 7 3 1 . 1 2 4 |
Örnek: Onaltılıdan ikiliye dönüşüm.
|
( 306.D )16 = ( 0011 0000 0110 . 1101 ) 2 |
|
3 0 6 . D |
BCD Sayıları
Dönüşüm kolaylığı nedeniyle, binary sayılar, çoğu kez, hexadecimal dizgede temsil edilirler. Binary temsilden decimal temsile dönüşüm uzun işlemler gerektirir. Bu nedenle, dönüşümü kolaylaştıran bir kodlama dizgesi kullanılır. Adına BCD (Binary Coded Decimal) denilen bu dönüşüm tablosu aşağıda verilmiştir. En yaygın kullanılanılanı 8421 BCD Kodlama Tablosudur.
8421 BCD Kodlama Tablosu
|
Decimal |
BCD |
|
|
8 ler |
4 ler |
2 ler |
1 ler |
|
0 |
0 |
0 |
0 |
0 |
|
1 |
0 |
0 |
0 |
1 |
|
2 |
0 |
0 |
1 |
0 |
|
3 |
0 |
0 |
1 |
1 |
|
4 |
0 |
1 |
0 |
0 |
|
5 |
0 |
1 |
0 |
1 |
|
6 |
0 |
1 |
1 |
0 |
|
7 |
0 |
1 |
1 |
1 |
|
8 |
1 |
0 |
0 |
0 |
|
9 |
1 |
0 |
0 |
1 |
Örnek:
Yukarıdaki tabloyu kullanarak 3691 sayısını decimalden BCD ye dönüştürünüz.
3 6 9 1
0011 0110 1001 0001
Örnek:
Yukarıdaki tabloyu kullanarak 1000 0000 0111 0010 sayısını BCD den decimale dönüştürünüz.
1000 0000 0111 0010
8 0 7 2
Alıştırmalar
1. Aşağıda 10-lu dizgeden BCD ye yapılan dönüşümlerin doğruluğunu sağlayınız.
a. 39 = 0011 1001 b. 40 = 0100 0000 c. 82 = 1000 0010
d. 65 = 0110 0101 e. 17 = 0001 0111 f. 99 = 1001 1001
2. Aşağıda BCD den 10-lu dizgeye yapılan dönüşümlerin doğruluğunu sağlayınız.
a. 1000 0000 = 80 b. 1001 0010 = 92 c. 0100 0011 = 43
d. 0000 0001 = 1 e. 0111 0110 = 76 f. 0101 0101 = 55
T.Karaçay
: Mikrobilgisayarlarda Aritmetik