Bilgisayar aritmetiği | CeReZFoRuM
Konusu 'Matematik & Geometri' forumundadır ve Suskun tarafından 8 Ekim 2012 başlatılmıştır.
On altılı sayı sistemi
Aritmetik Mantık Birimi (AMB) aritmetik ve mantık işlemlerini gerçekleştiren bir dijital devredir. AMB en basit işlemi gerçekleştiren mikro denetleyiciden, en karmaşık mikroişlemciye sahip bir bilgisayara kadar tüm işlemcilerin yapıtaşıdır. Modern bilgisayarların içinde bulunan mikroişlemcilerin ve ekran kartlarının içinde çok karışık ve güçlü AMB'ler bulunmaktadır. AMB kavramına ilk olarak 1945 yılında matematikçi John von Neumann EDVAC adlı yeni bir bilgisayar üzerine bulgularını anlatan raporunda değinmiştir.
Genel AMB gösterim şekli: A ve B işlenen; R çıkış; F denetim biriminden gelen giriş; D ise durum bildiren çıkış​
1946 yılında, Von Neumann ve meslektaşları Princeton Institute of Advanced Studies (IAS) için bir bilgisayar tasarlamaktaydı.İlerleyen yıllarda bir çok bilgisayar tasarımı için prototip haline gelmiş olan bu bilgisayarda temel matematiksel işlemleri ( toplama, çıkarma, çarpma ve bölme) gerçekleştirme gerekliliğinden dolayı , Von Neumann işe yarar bir bilgisayarın bahsedilen işlemler için özelleşmiş bir yapıya ihtiyaç olduğuna inanıyordu ve buna bağlı olarak AMB'nin bir zorunluluk olduğunu belirtmiştir.
Bir AMB, işlemlerini diğer dijital devrelerin kullandığı sayı biçimiyle aynı şekilde ifade etmelidir. Modern işlemcilerin tamamına yakını İkiye Tümleyen gösterimini kullanmaktadır. İkiye tümleyen gösterimi işaretli ve işaretsiz sayıları kolay ve verimli bir şekilde gösterebildiğinden AMB'ler için işlem kolaylığı sağlamaktadır. Eski bilgisayar ise birçok çeşitli sayı gösterim biçimi kullanmaktaydı.Bu bilgisayarlarda bire tümleyen,ikiye tümleyen,işaret büyüklüğü formatı ve hatta gerçek ondalık sistem gibi fonksiyonlar da bulunmaktaydı.
XOR,VE,VEYA ve toplama işlemi yapan basit bir AMB şeması​
İşlemciler birçok işlemi bir veya daha çok AMB ile gerçekleştirilir. AMB veriyi giriş yazmaçlarından alır, işletir ve sonucu bir çıkış yazmacına kaydeder. Kontrol birimi AMB'nin veriye hangi işlemi yapacağını seçer. İşlemcinin diğer mekanizmaları yazmaçlar ve hafıza arasında verileri taşır.
Şekilde görülen 2-bit AMB'nin A ve B isminde iki tane girişi bulunmaktadır. A & B en anlamsız biti (basamak değeri en düşük biti), A & B en anlamlı biti (basamak değeri en yüksek biti) göstermektedir. A ve B girişleri soldaki 4 tane mantık kapısına (yukarıdan aşağıya) yönlendirilmektedirler: XOR , VE, VEYA ve XOR.Yukarıdaki 3 mantık kapısı XOR, VE ve VEYA işlemini gerçekleştirirken en son XOR kapısı tam toplayıcının (full adder) giriş kapısıdır. Son adımda ise istenilen sonuç çoklayıcı yardımıyla seçilir. Denetim biriminden gelen 3 bitlik işlem kodu (OP) çoklayıcıya hangi girişi seçmesini gerektiğini belirtir.
Sekil-1 Genel AMB blok yapısı​
Bu birime giriş işlemleri, akümülatör kaydedicisiyle bellekten alınan veri arasında veya akümülatörle diğer kaydediciler arasında olabilir. ALU' nun mikroişlemci içerisindeki basitleştirilmiş çalışma biçimi Şekil-2'de görülmektedir.
Sekil-2 AMB'nin Mikroişlemci içinde çalışma biçimi​
Başlangıç ve sonuç bilgilerini depolamak için akümülatör kullanılır. Bazı mikroişlemcilerde akümülatör yerine VERİ KAYDEDİCİ (data reg) kullanılmıştır.
Geçici Kaydedici (Temporary Register)
Bellekten alınan işlem bilgilerinin ilk durak yeri: geçici kaydedicidir.
Bayrak Kaydedici (Flag Register)
Bazı mikroişlemcilerde bayrak kaydedici yerine; ALU tarafından yapılan işlemlerin sonucunu gösteren ve bu sonuçları değerlendirme ortamını yaratan devredir. Bu sonuçlara göre bazı düzeltmeler gerekiyorsa bilgisayar bunları kendi kendine yapabildiği gibi bayrak ekrana çağrılarak bazı yarılarının dışarıdan yapılması da mümkün olmaktadır. Durum kaydedici veya Koşul kodu kaydedici değimleri de kullanılır. Aritmetik lojik işlem birimi ve bu yardımcı devrelerinin tümüne birden ALU gurubu denir. Yalnızca ALU denildiğinde ise asıl işlem yürütücü kısım olan ADDER ve SHIFTER amaçlanır.
Aritmetik Lojik Ünitenin İşlevleri
Aritmetik işlemler denilince başta toplama, çıkarma, bölme ve çarpma; mantık işlemleri denilince AND, OR EXOR ve NOT gibi işlemler akla gelir. Komutlarla birlikte bu işlemleri, mantık kapılarının oluşturduğu toplayıcılar, çıkarıcılar ve kaydıran kaydediciler gerçekleştirirler. Bloklaştırılmış bu devreler bir dâhili veri yolu vasıtasıyla birbirlerine, bir başka veri yolu ve tamponlar vasıtasıyla kaydedicilere ve zamanlama-kontrol birimine bağlanmıştır.
ALU' da gerçekleşen bütün bu işlemler kontrol sinyalleri vasıtasıyla Zamanlama ve Kontrol Biriminin gözetiminde eşzamanlı olarak yapılır. Mikroişlemcinin temel elemanlarından biridir. ALU iki parçadan oluşur: Aritmetik ve Lojik üniteler.
a) Aritmetik ünite: Toplama, çıkarma, artırma, azaltma gibi işlemleri yapar.
b) Lojik ünite: AND, OR, NOT gibi işlemleri gerçekleştirir
Sekil-3 AMB'de gerçekleşen Aritmetik ve Lojik İşlemler​
AMB'lerin çoğu aşağıdaki işlemleri gerçekleştirebilir.
Toplama,çıkarma ve bazı durumlarda çarpma ve bölme işlemleri (çarpma ve bölme AMB'nin bir birimi olacağı gibi AMB'den bağımsız bir birimde olabilir.AMB'de ne kadar çok birim varsa yapısı da o kadar karmaşık olmaktadır.)
Mantıksal işlemler: (VE, DEĞİL, VEYA, ÖZELVEYA)
Bit kaydırma işlemleri. Bir sayıyı belirtilen bit sayısı kadar sağa veya sola, işaret genişletilerek veya genişletilmeyerek, kaydırmak veya döndürmek.Kaydırmalar sayıyı 2 ile çarpma veya bölme olarak da düşünülebilinir.Çarpma ve bölme işlemlerinde olduğu gibi bu işlemlerde AMB'den bağımsız birim tarafından üstlenilebilir.
AMB'ler herhangi bir işlemi yürütecek şekilde tasarlanabilir fakat işlem ne kadar karmaşıksa maliyet artar. Bu maliyet işlemcide kullandığı yer, harcadığı enerji vs. olabilir. Bu sebepten dolayı bir AMB tasarlayıcısı, tasarımın işlemi istenen hızda yapmasını temin ederken, bu tasarımın uygulama esnasındaki karmaşıklığı ve sarfiyatı ile ilgili ödünleşimi de yapması gerekir. Örneğin bir sayının karekökünü alacak bir AMB tasarlandığını düşünelim.İlgili mühendisin önünde aşağıdaki seçenekler bulunmaktadır:
Çok fazla karmaşık bir devre tasarlayarak, tek basamakta karekökü hesaplayan bir AMB olabilir.Buna "tek vuruşluk hesaplama (calculation in single cycle)" denir.
Çok karmaşık bir devre tasarlayarak, karekökü birkaç basamakta hesaplayan bir AMB olabilir.Burada ki fark basamakların arasındaki geçici sonuçlar arka arkaya dizilmiş devrelerden geçerek her basamakta var olan sonuca yeni bir işlem uygulanarak nihai sonuca ulaşılması işlemidir.Bunu bir üretim bandına benzetebiliriz.Bu sayede AMB aynı anda birkaç sayının karekökünü işleme alabilir.AMB'de bulunan basamak sayısı kadar sayı işlenmeye başladıktan sonra her adımda bir sonuç dışarı çıkar ve böylece AMB dolduktan sonra tek vuruşluk işlem yapandan farkı kalmaz.Bu tip işleme "boru hattı ile hesaplama" denmektedir.
Karmaşık bir devre tasarlayarak karekök işlemini değişik basamaklarda hesaplayan bir AMB olabilir. Buna "etkileşimli hesaplama" denmektedir ve genelde mikroprogramlama ile yapılmış karmaşık bir denetim birimi ile gerçekleştirilir.
İşlemcide basit bir AMB bulundurulur, yukarıdaki seçeneklerden herhangi birini gerçekleştiren yardımcı bir ikinci işlemci, ayrıca ve daha pahalı bir şekilde sisteme eklenebilecek halde satılabilir.
Programcılara yardımcı ikinci bir işlemci veya emülatör bulunmadığını söyleyerek, kendi algoritmalarını yazmalarını söylemek.Bu işlem yazılım kütüphanelerinin var olma nedenidir.
Yardımcı işlemcinin varlığı taklit edilerek, program her karekök işlemini gerçekleştirmek istediğinde eğer varsa yardımcı işlemciyi kullanması, yoksa bir kesme yaratarak işletim sistemini karekök işlemini herhangi bir yazılımla gerçekleştirmesi yönünde uyarması şeklinde bir çözüm olabilir. Buna yazılım taklidi denir
Yukarıdaki seçenekler en hızlı ve pahalıdan en yavaş ve en ucuza doğru gitmektedir.En basit bilgisayar dahi en karmaşık formülü gerçekleştirebilir fakat basit bilgisayarın var olan işlemi yavaş gerçekleştirmesinin nedeni ,yukarıda belirtilen seçeneklerde olduğu gibi, işlenmesi gerek basamak sayısının artmasıdır. Intel Core veya AMD64 gibi güçlü işlemcilerde çok karmaşık AMB'ler bulundurmak mümkün olduğundan; basit işlemler için 1. seçenek, çoğu karmaşık işlemler için 2. seçenek ve aşırı karmaşık işlemler için 3. seçenek kullanmaktadır.
AMB'nin girişleri işlenecek veriler ve denetim biriminden gelen hangi işlemin yapılacağını belirten değerlerdir.Çıkışı ise yapılan işlemin sonucudur. Çoğu AMB tasarımında belirli durumlara göre farklı değerler alan bitler bulunmaktadır bunlara bayraklar denir. Bu bayraklar elde ,taşma, sıfıra bölme vs. gibi olabilir ve AMB'ye giriş ya da çıkış olabilir.
Kayan nokta birimi
Kayan nokta birimi de AMB gibi iki değer arasında belirli işlemleri gerçekleştirir fakat üzerinde çalıştığı değerler ikiye tümleyen ,BCD'den daha karmaşık olan kayan nokta gösterimine sahip değerlerdir. Bu işlemleri gerçekleştirmek için kayan nokta biriminin de içinde AMB'ler bulunabilir. Genel olarak mühendisler ikiye tümleyen, BCD gibi formatlara sahip tam sayı ile aritmetik işlemler yapan birimlere AMB ismini vermektedir. Kayan nokta veya karmaşık sayı gibi daha çok bitle gösterilen biçimlerle işlem yapan birimlere daha yaratıcı isimler verilmektedir.
Mantık devrelerinde taşma, devrenin sağladığı bit alanının işlem sonucunda ortaya çıkan verinin elde bulunan saklama alanına sığmaması durumunda olur.
İkiye tümleyen (two’s complement) biçiminde tutulan tüm sayılarda bir sınır vardır. 4 bitlik bir tamsayıyı ikiye tümleyen biçiminde gösterirken temsil edilebilen en büyük tamsayı değer 7 (0111), en küçük tamsayı değer ise -8 (1000)’dir. Bu şekilde 9’u göstermek mümkün değildir, yani dörder bitlik gösterimde var olan 5 (0101) ve 4 (0100) sayılarının toplamını 4 bitle göstermek mümkün değildir.
0101 + 0100 = 1001
Örnekte de görüldüğü gibi cevap 4 bitlik gösterimde -7 olur. Bu duruma daha birçok örnek verilebilir. Karşılaşılan bu probleme Taşma (Overflow) adı verilir. Taşma, hesaplama sonucunda gösterilebilir alanın dışına bir değerin düşmesiyle ya da işaret bitinin (sign bit) toplama sonucu değişmesiyle meydana gelebilir.
İkiye tümleyeni kullanırken bu durum iki pozitif tamsayıyı ya da iki negatif tamsayıyı kendi aralarında toplarken oluşabilir. İki durumda da sorun sonucun işaret bitini kontrol ederek saptanabilir. Pozitif sayıların toplamının negatif olarak ve negatif sayıların toplamının pozitif olarak ortaya çıkmasından Taşma olduğu anlaşılabilir. Fakat sayı işaretsiz (unsigned) olduğunda bu yöntem kullanılamaz. İşaretsiz tamsayılar genellikle taşmanın yok sayıldığı bellek adreslerinde kullanılır. Bilgisayar tasarımcısı taşmanın hangi durumlarda tespit edilip hangilerinde yok sayılacağını önceden belirlemelidir. MIPS’in bunun için sunduğu iki çözüm vardır:
( MIPS yapısı )
Add (add), add immediate (addi) ve subtract (sub) taşmaya neden olabilir.
Add unsigned (addu), add immediate unsigned (addiu) ve subtract unsigned (subu) taşmaya neden olmaz.
C programlama dilinde taşma yok sayıldığından dolayı, MIPS C derleyicileri değişken türleri ne olursa olsun aritmetik işlemlerin işaretsiz versiyonları olan addu, addiu ve subu’yu kullanır. MIPS Fortran derleyicileri ise aritmetik işlemleri işlenenlerin (operands) türüne göre seçer.
Tabii ki günümüzde birçok bilgisayar burada verilen örneklerden çok daha uzun bit örüntüleri (bit pattern) kullandığından daha büyük değerler sorunsuz, taşma olmadan toplanabilir ve saklanabilir. Bugün bilgisayarlarda genellikle kullanılan 32 bitlik örüntülerde ikiye tümleyen biçiminde pozitif değerler için 2.147.483.647’ye kadar değer tutulabilir. ( Bilgisayar mimarisi ) Eğer daha büyük değerler gerekirse daha uzun bit örüntüleri kullanılabilir veya ölçüm değerleri değiştirilebilir. Örneğin ölçümleri santimetre yerine metre olarak yapmak hem daha küçük değerler kullanılmasını sağlar hem de halen gereken hassaslığı ve isabetliliği sağlar.
Önemli olan nokta bilgisayarların hata yapabilir olduğudur. Bilgisayar kullanıcıları bu tehlikeden haberdar olmalıdır. Bu sorun genellikle, programcılar ve kullanıcılar tarafından bilinmeden kayıtsızlıkla karşılanır ve küçük sayılardan çok büyük sonuçlar ortaya çıkabileceğini görmezden gelinir. Örneğin, bilgisayarların genellikle 16 bitlik oldukları dönemde ikiye tümleyen biçiminde işlem yapan bilgisayarlarda gösterilebilir en büyük değer olan 215 = 32.768’e ve daha büyük değerlere ulaşıldığında taşma meydana gelirdi. 19 Eylül 1989 günü bir hastanenin bilgisayar sistemi uzun süren bir hizmet döneminden sonra beklenmeyen bir hata meydana getirdi. Bunun nedeni arızanın oluştuğu tarihin 1 Ocak 1900 tarihinden 32.768 gün sonrasına denk gelmesiydi ve makinenin tarih hesaplama sistemi 1 Ocaktan başlamak ve geçen gün sayısına göre tarih hesaplamak üzerine tasarlanmıştı. Sonuç olarak 19 Eylül 1989 günü taşma yüzünden negatif bir sonuç ortaya çıktı ve bilgisayar bu sorunu kontrol altına alabilecek şekilde bir donanıma ve yazılıma sahip değildi.
Kayan Nokta aritmetiğinde taşma iki türlü meydana gelebilir. Bu türler overflow ve underflow olarak adlandırılır.
Overflow: Pozitif bir üstün üst (exponent) alanına sığmayacak kadar büyük hale gelmesi durumuna verilen isimdir.
Underflow: Negatif bir üstün üst (exponent) alanına sığmayacak kadar büyük bir hale gelmesi durumuna verilen isimdir.
Kırpma (Truncation) Hataları
Rahatsız edici başka bir problemse, 1 baytlık kayan nokta sisteminde örnek olarak 2 5⁄8 ‘in saklanması istendiğinde ortaya bir sorun çıkacaktır. İlk önce 2 5⁄8 ikilik sistemde yazıır; 10,101. Fakat bu ondalık(mantissa) alanına kopyalanırsa kullanılabilir alanın dışına taşmak gerekir. Bu durumda en sağdaki en anlamsız bit (least significant bit) dışarıya atılır ve kaybolur. Bu 1⁄8’lik bir büyüklüğün kaybolması anlamına gelir.
Bu sorun görmezden gelinip üst alanı ve işaret biti doldurulursa elde edilen sonuç 01101010 olur yani 2 5⁄8 yerine 2 1⁄2 elde edilmiş olur. Bu duruma Kırpma (truncation) hatası adı verilir ve sonucunda ondalık alanının yeteri kadar geniş olmamasından kaynaklı olarak değerin bir kısmı kaybolur.
Bu durumda 2 1⁄2 + 1⁄8 + 1⁄8 sonucu bulunmak istendiğinde değerler yazıldığı sırayla toplanırsa 2 1⁄2 + 1⁄8 sonucu olarak 2 5⁄8 yani ikilik sistemde 10.101 elde edilir. Daha önceden de görüldüğü gibi bu değer doğru olarak tutulamaz. Eklenilen 1⁄8 değeri hiç eklenmemiş gibi ortadan kaybolur. Sonuç olarak gelen 2 1⁄2’ye son 1⁄8 de eklediğinde yine aynı sorundan dolayı son sonuç olarak 2 1⁄2 elde edilir. Fakat değerler tersten sıralanıp toplanırsa bu sorun çözülebilir. 1⁄8+ 1⁄8 = 1⁄4, yani ikilik sistemde .01 sonucu elde edilir. İlk aşamanın sonucu bir baytta 00111000 olarak isabetli şekilde saklanır. Bu değer 2 1⁄2 ile toplanırsa 2 3⁄4 sonucu elde edilir. Yani bir baytta isabetli olarak 01101011 bu sefer doğru olan sonuç tutulabilir.
Özetlemek gerekirse kayan nokta biçiminde nümerik değerler eklenirken kullanılan sıralama sonucun doğru olması açısından önemlidir. Bu biçimde çok büyük bir sayıya çok küçük bir sayı eklenirse küçük sayı kırpılmış (truncated) olabilir. Sonuç olarak değerleri birbirine eklemek için genel kural küçük olan değerler büyük değerin yanında kaybolmayacakları umularak bir araya toplanır ve kalan büyük değerle son olarak toplama işlemi yapılır.
Bu tür sorunların önemi daha uzun ondalık alanı kullanılarak azaltılabilir. Aslında bugün birçok bilgisayar burada gösterilen 8 bit yerine 32 bit veya daha fazlasını kullanır. Bu aynı zamanda daha uzun bir üst alanını kullanılabilir hale getirir. Bu uzunluktaki formatlarda bile halen daha isabetli sonuçlara ihtiyaç duyulabilir.
Günümüzde ticari yazılım paketi tasarımcıları bu konuda eğitimsiz kullanıcıları bu durumdan korumak adına iyi işler ortaya koymaktadırlar. Standart bir hesap tablosu (spreadsheet) sisteminde 1016 ve daha fazla farklar olmayan sayılarda doğru cevaplar alınması beklenir. Sonuç olarak, 10.000.000.000.000.000’e 1 ekleme ihtiyacı duyulursa 10.000.000.000.000.001 yerine 10.000.000.000.000.000 cevabı alınabilir.
Bu tür problemler genellikle basit kullanıcılar için büyük sorunlar teşkil etmez fakat hassasiyet uçak ve gemi sistemleri, uzay araştırma araçları gibi sistemler için son derece önemli olabilir.
Başka bir kırpma hatası sebebi ise gündelik hayatta kullanılan on tabanında her zaman ortaya çıkan bir problemdir: örneğin 1⁄3' ün desimal biçimde gösterilmesinde karşılaşılan ondalığın sonsuza gitmesi (nonterminating expansions) problemi. Bazı değerler burada olduğu gibi kaç bit kullanılırsa kullanılsın tam olarak ifade edilemez. On tabanı ve ikilik (binary) gösterim arasındaki fark ikilik gösterimde daha fazla sonsuza giden değer vardır. Örneğin 0,1 ikilik sistemde tam olarak ifade edilemez. Buna sorun teşkil eden bir örnek vermek gerekirse dolar ve sentlerle çalışan, bu durumdan habersiz bir insanın karşılaşacağı birçok sorun vardır. Özellikle dolar genel birim olarak kullanılıyorsa “dime” isabetli olarak saklanamaz. Bu durumda genel birim olarak peni kullanılmasıyla bütün değerlerin tamsayı olması ve daha isabetli sonuçlar elde edilmesi sağlanabilir.
Taşmayla başa çıkmanın birkaç yolunu bir araya toplamak gerekirse:
Tasarım: uzunluk ve işaret tipi bakımından uygun veri türleri seçmek
Sakınma: işlem ve işlenenlerin seçiminde elde edilebilecek sonucun asla saklanabilecek sonuçtan daha uzun olmayacağına emin olmak
Kontrol etme: eğer taşma olacağı önceden tahmin edilirse veya tespit edilirse önce başka bir işlem yapılır. Örneğin önce küçük olan girdiler toplanır arkasından daha büyük değerlerle toplanır. İşlemciler genellikle bir ek özellik olarak bir statü biti kullanarak taşmaları tespit edip önleyebilirler.
Yayılma: eğer verilen değer tutulmak için çok büyükse taşma olduğu belirtilerek özel bir değere atanabilir. Üzerinde yapılacak işlemler uygulandıktan sonra bu değer döndürülür. Bu yöntem değerin uzun işlemler sonunda her aşamada kontrol edilmesindense bütün işlemler bitince kontrol edilebilmesine olanak sağlar. Bu özellik genellikle FPU adı verilen kayan nokta donanımlarıyla(Floating point hardware) desteklenir.
Yok sayma: en fazla tercih edilen yoldur fakat yanlış sonuçlar verebilir ve programın güvenilirliğini tehlikeye atabilir.
Sıfıra bölünme bir taşma değildir. Matematiksel olarak sıfıra bölünme tanımsızdır.
BCD Kodu, bilgisayar sistemlerinde ikili kodlanmış onlu (binary coded decimal) sayı sistemi, onluk tabandaki sayıları ikilik tabana kodlama anlamına gelen bir sayısal kodlama metodudur. Onluk sistemdeki 0 ile 9 arası rakamların 4 bit ile (ikilik sistemde) ifade edilmesidir.
Onluk İkilik BCD(8421)
BCD'de 4 bit 1010-1111 arası gösterim geçerli değildir. İki veya daha fazla basamaktan oluşan onluk sayılar için tek basamaklı onluk sayıların ikilik kodları yan yana yazılır.
(39)10 = (0011 1001)BCD
BCD kodlamanın en yüksek basamak ağırlığı (23) 8, üçüncü basamak (22) 4, ikinci basamak (21) 2 ve en düşük basamak ağırlığı (20) 1 olarak belirlenmiştir. Bu kodlama her bir onluk sistemdeki (decimal) sayının dört bitlik karşılığı yazılarak tamamlanır.
Binary ile BCD'nin karşılaştırılması:
Hata tespiti, veri iletimi sırasında farklı nedenlerle bozulan veriyi tespit etme işlemidir. Hata tespiti için günümüze kadar birçok yöntem geliştirilmiştir.
İki boyutlu eşlik denetimi,
Yöntemlerin hemen hemen hepsinde veriye hata tespiti amacı ile bilgi eklenmektedir. Eşlik denetimi gönderilecek veriye sadece bir bitin eklendiği oldukça basit bir yöntemdir.
Parity Check bir bitstream'in tüm bitlerinin toplamının tek veya çift olmasına göre ayrı bir parity bit tutup bunla datayı kıyaslayarak güvenliğini kontrol eden yöntemdir. Parity'ye sahip ram'ler dışında, async bağlantı protokollerinin bazılarında da kullanılır. Mesajın karşıya hatasız iletilip iletilmediğini anlamak için kullanılan bir mekanizmadır. Her bitin xorlanmasıyla elde edilir. Sonuç 1 çıkarsa odd parity, 0 çıkarsa even paritydir.
verinin tüm bitlerinin Xor işleminden sonra değili (not) alınarak hesaplanmaktadır.
verinin tüm bitleri Xor (exclusive or) işlemine tabi tutulur.
Tek eşlik biti: Çift eşlik Biti:
Veri : 0110 0110
Eşlik bitinin hesaplanması: 0^1^1^0 = 0 ~(0^1^1^0) = 1
Gönderilecek veri: 01100 01101
Telekomünikasyonda, ismini yaratıcısı Richard Hamming’den alan, doğrusal hata düzelten bir koddur. Hamming Kodu sadece tek bitlik hatayı saptayıp düzeltebilir. İki bitlik bir hatayı sadece saptayabilir ama düzeltemez. Buna karşın, basit eşlik kodu iki bitin transpoze olduğu yerde hata bulamaz; bulsa da düzeltemez.
Hamming 1940’larda Bell Laboratuarları’nda manyetiksel röle bazlı, zaman döngüsü saniye olan Bell Model V adlı bir bilgisayarda çalışmıştır. Giriş hataları okunabilen punch kartlarına yüklenirdi. Günler boyunca özel kodlar hataları bulur ve ışık yakardı ki operatörler problemi düzeltsin. Mesaiden sonraki periyotlarda ve hafta sonlarında, operatörler olmadığından makine diğer işlemlere geçerdi. Hamming hafta sonları çalışırdı ve kart okuyucunun güvenilmez olduğundan programlarına ilk satırdan başlamak zorunda kalması onu deli ediyordu. Yıllar içinde hata düzeltme problemi üzerinde çalışarak çok güçlü bir dizi algoritma yarattı. 1950 yılında bugünkü adıyla aynı olan ve hala kullanılan Hamming Kodu'nu yayımladı.
Hamming'den Önceki Kodlar
Hamming kodundan önce birkaç basit hata düzeltici kod kullanılmıştır. Ama aynı genel uzayda Hamming'in tekniğinden daha başarılı değillerdi.
Eşlik verilerdeki 1 numaralı bitin tek veya çift olduğunu anlamaya yarayan bir bit ekler. Tek bir bit iletim anında değişirse, eşlik değişir ve hata o noktada bulunabilir. Eşlik değeri 1 olursa verideki 1'lerin sayısı tektir, 0 ise çifttir. Yani veri ve eşlik bitleri bir arada çift sayıda 1’e sahip olmalıdır. Eşlik denetimi çok sağlam bir yöntem değildir. Çünkü değişen bit sayısı çift olduğunda, kontrol biti doğru olacak ve hata görülmeyecektir. Dahası eşlik biti hangi bitin değiştiğini veya hata bulundurduğunu da anlamayacaktır. Veri tamamen çöpe atılmalıdır veya en baştan gönderilmelidir. Gürültülü iletim ortamında veri iletiminin başarılı olması çok uzun zaman alır ya da hiç olmaz. Eşlik denetimi çok iyi olmasa da, sadece bir bitin kaybolduğunda yerine konmasını sağlayabilir. Bunun için de hangi bitin kaybolduğunun bilinmesi gerekir.
Beşin İkisi Kodu
1940’larda Bell beşin ikisi diye bilinen biraz daha karmaşık bir kod kullanmıştır. Bu kod bütün beş bitlik bloklarda iki tane bir olduğunu, blokta iki tane bir yoksa bir hata olduğunu gösterir. Beşin İkisi Kodu halen bir bitlik hataları bulabilir. Ama bir bit 1'den 0'a, başka bir bit 0'dan 1'e dönerse hata bulunamaz.
Kullanılan başka bir kod ise her veri bitinin birkaç kere tekrar edilerek doğru olduğunun ve doğru transfer edildiğinin garanti edilmesi üzerine kuruludur. Mesela gönderilen veri 1 olsun. n = 3 tekrar için 111 gönderilir. Bu üç bitten biri farklı ise hata oluşmuş demektir. Kanal yeterince temiz ise, çoğu seferde üçlünün sadece bir biti farklı olacaktır. 001, 010 ve 100 sıfıra; 110, 101 ve 011 bire tekabül edecektir ki bu sayılar orijinal bit için oy gibidir. Bu özelliği taşıyan ve orijinal mesajı hatalarını fark ederek yeniden yazabilen bu kodlara hata düzelten kod denir. Ama bu kodlar her hatayı düzeltemez. Bizim örneğimizde 2 biti değiştirirsek alıcı 001 elde eder. Sistem hatayı görür ama orijinal bitin 0 olduğu sonucuna varır ki bu da yanlıştır. Her biti kopyalama sayımızı artırırsak mesela 4 kez, bu sefer bütün 2 bitlik hataları bulabilir ama düzeltemeyiz. 5 kereye çıkarırsak 2 bitlik hataları düzeltebiliriz ama 3 bitlik hataları düzeltemeyiz. Dahası, tekrar kodu çok verimsizdir. Bizim örneğimizde bir kerede gidecek biti üç kere gönderecek zaman kaybına yol açmıştır. Tekrar sayısı arttıkça verim katlanarak düşecektir.
Hamming Kod Hesapları
Bir mesaj içinde daha fazla hata düzelten bit olursa, bu bitler değişik yanlış bitlerin oluşturduğu değişik hataları bulabilecek şekilde ayarlanabilirse, kötü bitler bulunabilir. Yedi bitlik bir mesajda yedi olası hatalı bit vardır. Üç tane kontrol biti hatayı bulmakla kalmaz, yerini de saptayabilir.
Hamming olan kodlama sistemlerinin, beşin ikisi dâhil, üzerinde çalışıp, bu fikirleri genelleştirmiştir. Başlangıç olarak sistemi açıklamak için bir terminoloji yaratmıştır. Bu terminoloji içinde veri bitleri sayısı ve hata düzelten bitlerin bulunduğu blokları da kapsar. Örnek olarak, eşlik içerisinde her veri sözcüğü için tek bit bulundurur. ASCII karakterlerinin 7 bit olduğunu varsayarsak, Hamming (8,7) kodu, toplamda sekiz bit, yedisi veri olmak üzere tanımlamıştır. Tekrarlama örneği bu kurama göre olacaktır. Bilgi oranı, ikinci sayının birinciye bölünmesiyle bulunur.
Hamming iki ve daha fazla bitin değişmesi problemini uzaklık olarak tanımlamıştır. (Halen “Hamming uzaklığı” olarak bilinir). Eşlik, herhangi iki bit değişimi görülmez olunca, uzaklık “2” olur.
Hamming bu uzaklığı ve bilgi oranını olabildiğince artırmaya çalışmıştır. 1940’lar boyunca var olan kodlar üzerinde önemli iletmeler gerçekleştiren birkaç kod yöntemi geliştirmiştir. Bütün sistemlerin anahtar noktası eşlik bitlerinin bütün bitlerin ve verinin üzerinden kontrol ederek geçmesidir.
Örnek Hamming Kodu Kullanımı
0110101 yedi bitlik veri sözcüğümüz olsun. Hamming Kodların nasıl hesaplandığı ve hatayı nasıl buldukları aşağıdaki tabloda gösterilmiştir. Data bilgileri için d, eşlik bitleri için p kullanılmaktadır. İlk olarak veri bitleri uygun yerlere konur ve eşlik bitleri her seferinde çift eşlik kullanılarak hesaplanır.
Hamming Kodunda Kullanılan Eşlik bitlerinin Hesaplanması
p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7
Veri (eşlik biti olmadan): 0 1 1 0 1 0 1
Veri (eşlik bitiyle birlikte): 1 0 0 0 1 1 0 0 1 0 1
Yeni veri sözcüğümüz (eşlik biti ile) 10001100101 olmuştur. Son bitin hatalı olduğunu farz edelim ve bu bit 1’den 0 ‘a değişmiş olsun. Yeni veri sözcüğümüz 10001100100'dır ve bu sefer Hamming Kodun nasıl elde edildiğini çift eşlik biti her hata sapladığında, eşlik bitini 1 olarak değiştirip analiz edelim.
Eşlik bitlerinin Denetlenmesi (değişmiş bit koyu renkli)
p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 Parity check Parity bit
Alınan veri sözcüğü: 1 0 0 0 1 1 0 0 1 0 0
p1 1 0 1 0 1 0 Kalır 1
p2 0 0 1 0 0 0 Kalır 1
p3 0 1 1 0 Geçer 0
p4 0 1 0 0 Kalır 1
Son adımda her eşlik bitinin değerini ölçelim. Değerin sayı karşılığı 11 çıkar. Yani 11. biti hatalıdır ve değiştirilmesi gerekir
İkilik tabanda 1 0 1 1
Onluk tabanda 8 2 1 Σ = 11
11. biti değiştirmek 10001100100'ı tekrar 10001100101 yapar. Hamming Kodlarını çıkartınca geriye orijinal veri sözcüğümüz 0110101 kalır. Bir eşlik biti hatalı olur, diğerleri doğru olursa sorudaki eşlik biti yanlıştır ve kontrol ettiği bitler de hatalı olacaktır.
Son olarak, x ve y konumlarındaki iki bit yer değiştirmiş olsun. x ve y ikilik gösterimlerinin 2k konumlarındaki bitleri aynı ise, o konuma tekabül eden eşlik biti ikisini de kontrol eder ve aynı kalır. x≠y olan bazı eşlik bitleri yüzünden bu konumlara tekabül eden bitler değişir. Sonuçta Hamming Kodu iki bitlik hataları bulur ama bunları bir bitlik hatalardan ayırt edemez.
Günümüzde Hamming Kod, spesifik olarak Hamming’in 1950 yılında gösterdiği bir (7,4) kodla ilgilidir. Hamming Kodu her 4 bitlik mesaja 3 kontrol biti ekler. Hamming’in algoritması bir bitlik hatayı bulup düzeltir ve iki bitlik hatayı tespit edebilir. Orta durum nakillerinde, hatalar çok değilse Hamming Kodu efektiftir.
Hamming kodlar, Hamming Matrisleri adı verilen matris çarpımlarının eşlik biti fikrinin genişlemesiyle çalışır. Hamming (7,4) kodu için birbiriyle alakalı kod yaratıcı matris G ve eşlik denetleyicisi matris H kullanılır.
G matrisinin ilk 4 sırası 4x4 birim matrisi I4, son 3 sıra ise 4 kaynak bitinden 3 eşlik bitine 4x3’lük matrisi gösterir. G’nin sütun vektörleri H’nin çekirdeğinin temelini oluşturur. Çarpım yapılırken birim matris veriyi iletir. Yukarıdaki açıklamadan farklı olarak, veri bitleri ilk 4 konumdayken, eşlik bitleri son 3 konumdadır. Bu matrisler gerçek Hamming matrislerinden farklı olsa da, bunlar Hamming Kodu daha kolay anlaşılır hale getiren gerekli detaylardır.
Benzer olarak H’nin 3 sütunu 3x3 birim matris I3’ü gösterirken, ilk 4 sütun kaynak veri bitleri ve eşlik denetleyicilerinden oluşan 4x3 matrisi verir. 4 blokluk yararlı veri bitini ve birikmiş diğer 3 göz ardı edilmiş biti kullanırız. (4+3=7 (7,4)). Veriyi göndermek için göndermek istediğimiz veri bloğunu vektör olarak düşünürüz. Mesela 1011 için:
Diyelim ki gürültülü komünikasyon kanalında veri iletmek istiyoruz. G ve p’nin çarpımını alır, modül 2 girişi ile X kod sözcüğünü elde ederiz.
İletim sırasında hata olmaz ise r kod sözcüğü, x ile tıpatıp aynı olur.
Alıcı H ve r’yi çarparak z sendrom vektörünü elde eder. z vektörü hata varsa nerede olduğunu gösterir. Bu çarpım;
Z vektörü 0 olduğundan, alıcı verinin hatasız olduğunu anlar. Bu sonuç veri vektörü G ile çarpıldığında , alt uzay vektöründe bir değişime uğradığı gözlemine dayanır. Transfer sırasında hiçbir şey olmazsa, r H’nin çekirdeği olarak kalır ve çarpım hep sıfırı verir.
Diyelim ki bir hata oluştu. Matematiksel olarak; r = x + eiyazılabilir. Mod 2’ye göre, i. konumda 1 olan bir sıfır vektörü, 1’den başlar. Yukarıdaki tanım i. Konumda bir hata olduğunu gösterir.
Şimdi bu vektörü H ile çarparsak :
x iletilen veri olduğundan hatasızdır ki bu, H ve x’in çarpımının sıfır olduğunu gösterir. Sonuç olarak;
Şimdi H ve P standart baz vektörlerinin çarpımı H’nin hata bulunan sütununu bulur. H’yi parçalı biçimde yarattığımızdan, hatalı sütunu 2’lik sayı olarak yazabiliriz. Mesela (1,0,1) H’nin bir sütunudur ve 5. konuma tekabül eder ki hata ordadır ve düzeltilebilir.
Alttaki şekli inceleyelim:
H’nin 2. sütununa denk gelir. 2. konumda bir hata bulunmuştur ve düzeltilebilir.
Bu yolu kullanarak tek bitlik hataların düzeltilebileceğini göstermek zor değildir. Bunun dışında, Hamming Kodu tek veya çift bit hataları bulabilir ama hata oluştuğunda H’nin çarpımı neredeyse hiçbir zaman sıfırdan farklı olmaz. Ama Hamming (7,4) bir ve iki bitlik hataları birbirinden ayıramaz.
Ekstra Eşlik Biti
Hamming kodları ekstra eşlik bitiyle kullanılabilir. Ek bir bütün bitlere Hamming Kodu bütün bitleri kontrol ettikten sonra uygulanıp eklenir. Bu geçerli kodların Hamming uzaklığını 3’ten 4’e uzatır. Sonra bütün 1,2,3 bitlik hatalar bulunabilir. Artı 2 bitlik hatalar 1 ve 3 bitlik hatalardan ayırt edilebilir. 1 bitlik hatalar düzeltilebilir.
Eşlik hatası gözlenmez ama Hamming Kodu bir hata bulur ise, bunun 2 bitlik bir hata olduğu farz edilir fakat düzeltilemez.
Modulo işlemi, hesaplamada bir sayının diğer bir sayıya bölümünden arta kalan sayıyı verir.
İki pozitif sayı, a (bölünen) ve n (bölen), verildiğinde, a modulo n (a mod n olarak kısaltılır) a sayısının n ile bölünmesinden arta kalan sayı olarak düşünülebilir. Örneğin "5 mod 4" ifadesi 1 sonucunu verirken, "9 mod 3" ifadesi 0 sonucunu verir (3'ü 3'le çarptıktan sonra 9'dan çıkaracak sayı kalmaz). a veya n negatif bir sayı olduğunda, bu naif tanım bozulur ve bir çok programlama dili bu değerlerin nasıl tanımlandığı konusunda farklılık gösterir. Modulo işlemi, genellikle a ve n iki tamsayı olduğu durumlarda yapılsa da, bilgisayar sistemlerinin bir çoğu sayısal işlenenlerin diğer türlerine de olanak sağlamaktadır.
Heksadesimal , 16 tabanlı sayı sistemidir. Hxx bilgisayar belleğindeki 8 bit'lik bayt'ları göstermek için kullanılan bir kestirme yoldur.
Bu sayı sistemine "16 tabanlı sayı sistemi" denilmesinin nedeni, 16 tane sembolden oluşmasıdır. Sembollerden 10 tanesi rakamlarla (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), geri kalan 6 tanesi harflerle (A, B, C, D, E, F) temsil edilir.
Aşağıdaki tabloda; 1'den 15'e kadar 16, 10, 8 ve 2 tabanlı sayılar verilmiştir.
Heksadesimal Sayıların Desimale Çevrilişi
5A316 = 5 · 162 + 10 · 161 + 3 · 160
= 5 · 256 + 10 · 16 + 3 · 1
= 1280 + 160 + 3
Desimal Sayıların Heksadesimale Çevrilişi
Desimal sayı, bölüm sıfır olana kadar heksadesimalin tabanı olan 16'ya bölünür. Bölme işlemi bittikten sonra, sırayla bölüm hanesindekiler ve en son olarak da kalan sayı soldan sağa yazılır. Örnek;
100/16 = 4(kalan):6(bölüm) 6/16 = 6(kalan) = 64
Bir ikili sayının ikiye tümleyeninin alınması, yani ikiye tümlenmesi, kendisinden büyük ve 2'nin tamsayı üssü olan en küçük tamsayıdan çıkarılması ile gerçekleştirilir. Elde edilen sayının ikili sayı aritmetiğinde orijinal sayının eksi işaretlisi olarak davranması nedeniyle, tamsayı değerleri bilgisayarda temsil etmek için kullanılan ikinin tümleyeni gösterimi bu işlemi temel almıştır. -1 ile çarpmanın (veya toplamsal tersin bulunmasının) ikinin tümleyeni kullanılarak gerçekleştirildiği bu gösterime göre oluşturulmuş sayıların değerleri aşağıdaki formül kullanılarak hesaplanabilir.
Buna göre, n ikillik bir bölgede temsil edilebilecek en küçük sayı 2-n-1—işaret ikili 1, diğer ikiller 0—olurken, en büyük sayı 2n-1-1—işaret ikili 0, diğer ikiller 1—olacaktır. Temsil edilebilir eksi değerlerin artı değerlerden sayıca bir fazla olmasının sebebi, tüm basamakların 0 olması ile temsil edilen sıfırın artı değerler ile aynı işaret ikiline sahip olmasıdır. Bu, birin tümleyeni ve işaretli büyüklük gibi diğer gösterimlerin aksine, ikinin tümleyeninde sıfır için tek gösterim olduğu anlamına gelir.
n basamaklı bir N sayısının ikinin tümleyeni N≠0 için 2n-N ve N=0 için 0 olarak tanımlanır. Sayının ikillerinin 1'e tümlenmesi ile yapılan birin tümleyeni düşünüldüğünde, bir sayının ikiye tümlenmesinin aynı sayının birin tümleyenine 1 ekleyerek yapılabileceği görülür. Daha basit bir yöntem önermek gerekirse, bir sayının ikiye tümlenmesi şöyle gerçekleştirilebilir: söz konusu sayının sağ tarafında yer alan 0'ları ilk 1'e kadar değiştirilmeden bırakılıp, bu 1'den sonraki basamaklardaki 0'lar 1, 1'ler de 0 ile değiştirilir.
İkininTümleyeni(011010010) → 100101110
İkininTümleyeni(110011011) → 001100101
Bugünkü modern bilgisayarlarda ikinin tümleyeni gösteriminin tercih edilmesinin birçok nedeni vardır.
Gösterimdeki en yüksek basamaklı ikil temsil edilen değerin işaretini belirler; eksi sayılar işaret ikilindeki 1 ile gösterilirken, 0 ve artı sayılar işaret ikilindeki 0 ile temsil edilirler.
0'ın sadece bir gösterimi vardır. Bu da 1'in tümleyeninde ve işaretli büyüklük gösteriminde oluşan +0 ve -0 sorununu ortadan kaldırır.
n ikilde -2n-1'den 2n-1-1'e kadarki tamsayı değerleri ifade edilebilir. Burada bir simetrinin olmaması 0'ın tek gösteriminden kaynaklıdır.
Mutlak değerce en büyük eksi sayının -1 ile çarpılması taşmaya neden olacaktır. Bunun nedeni de yukarıda bahsedilen simetrinin olmamasıdır.
Eksi sayıların gösterimi
İşaretli büyüklük gösterimi
Eksi sayıların gösteriminde donanımdaki sınırlamalardan dolayı, ikil adı verilen ikili sayılardan yararlanılır. İşaretli ya da işaretsiz bütün ikili sayılar bilgisayarda ikillerle ifade edilir. Sayının işaretli olup olmadığı önceden belirlenir. Eğer ikili tabanda bir sayı işaretli olarak belirlenmişse en soldaki ikil sayının işaretini, geri kalan ikiller ise sayının mutlak değerini ifade eder. Eğer sayı işaretsiz olarak belirlenmişse en soldaki ikil sayının en anlamlı ikili olur. Burada, işaret ikili olarak artı sayılar için 0, eksi sayılar için ise 1 kullanılır. Örneğin; 0110 işaretsiz ikili sayısı olarak onlu tabanda 6, işaretli olaraksa +6 anlamına gelir. 1110 ise işaretsiz olarak onlu tabanda 14 iken işaretli olarak -6'ya eşdeğerdir.
İşaretli tümleyen gösterimi
Eksi bir sayı mutlak değerinin tümleyeni alınarak da ifade edilebilir. Bir sayının ters işaretlisinin sadece işaret ikilinin değiştirilmesiyle elde edildiği işaretli büyüklük gösteriminden farklı olarak, tümleyenle gösterimde işaret değiştirmek için sayının tümleyeni alınır. Bu, işaret ikili dışındaki ikillerin de değişebileceği anlamını taşır.
Artı sayılar her zaman için en solunda 0 ile başlayacağından, bu sayıların tümleyenlari de, yani eksi sayılar, 1 ile başlayacaktır. Diğer ikillerin yeni değerleri, ne çeşit bir tümleme yapılmasına bağlı olarak değişir. Birin tümleyeni alınması durumunda, diğer ikiller de tersi alınarak değişirken, ikinin tümleyininde sonuç işaretsiz gösterimdeki her ikilin tersinin alınıp bulunan sonuca 1 eklenmesiyle ifade edilir.
12 sayısının sekiz ikille gösterildiği durumu inceleyelim. +12'nin gösterimi en soldaki 0 değerli işaret ikilinin ardından mutlak değerin ikili tabanda ifade edilmesiyle elde edilir. Dolayısıyla, +12 00001100 olarak temsil edilecektir. Buna göre, -12 sayısını üç şekilde ifade edebiliriz:
İşaretliBüyüklükG(-12) /* İşaret ikili değiştirilir */ → 10001100
BirinTümleyeniG(-12) /* Tüm ikiller değiştirilir */ → 11110011
İkininTümleyeniG(-12) /* BirinTümleyeniG(-12) + 1 */ → 11110100
Dikkat edecek olursanız, +12 ve -12'nin ikinin tümleyeni gösterimlerinin toplamı 00001100 + 11110100 = 100000000'dır. Bu dokuz ikillik işaretsiz bir sayıdır ve bu sayı da 28 = 256'dır. Ancak biz sonucu sekiz ikillik ikinin tümleyeni gösterimli bir sayı olarak ele alırsak 1'i sekiz ikillik hesaplamada oluşan bir taşma olarak düşünür ve atarız. Dolayısıyla, sonuç olarak 00000000 = 0'ı elde ederiz. Bu da +12 ve -12'nin toplamından bekleyeceğimiz bir sonuçtur.
2'nin tümleyeni ile ifade edilen farklı işarete sahip iki sayıyı topluyorsak herhangi özel bir işleme gerek yoktur. Çünkü bu durumlarda taşma oluşmaz. 2'nin tümleyeni kullanılarak temsil edilen iki eksi sayının toplamı, işaret ikilleri de dahil olmak üzere iki sayının toplanmasıyla bulunur. İşaret ikillerinin toplanmasıyla oluşan elde atılır. Oluşan sonuç eğer eksiyse bu 2'nin tümleyeni biçimindedir.
00000011 (elde) 00001111 (elde)
00000110 (+6) 11111010 (-6)
+ 00001101 (+13) + 00001101 (+13)
00010011 (+19) 00000111 (+7)
00000011 (elde) 11111001 (elde)
+ 11110011 (-13) + 11110011 (-13)
11111001 (-7) 11101101 (-19)
Buradaki mantık onluk tabanda kullandığımız toplama mantığı ile aynıdır. En düşük değerli basamaktan başlayarak toplama işlemleri yapılır, çıkan eldeler bir sonraki basamağa aktarılarak toplama işlemi tamamlanır. Eğer iki artı sayının toplamından eksi bir sonuç, iki eksi sayının toplamından artı bir sayı çıkıyorsa burada bir taşma söz konusudur.
Genel anlamda n ikillik iki sayı ile başlamışsak ve toplamanın sonucu n+1 ikilden oluşuyorsa bir taşma var demektir. n ikillik bir sayının başına artı sayılar için 0, eksi sayılar için 1 getirerek ikil sayısını (n + 1)'e çıkarırız ve toplamı işlemini böyle gerçekleştiririz. Taşmanın oluştuğu bir durum için +6 ve +13 sayılarnı 5 ikille ifade edip toplayalım.
+ 01101 (+13)
10011 (-3) (taşma)
İkili tabandaki çıkarma işleminin mantığı onlu tabandaki ile aynıdır: çıkan sayının basamağı diğer sayının aynı basamağından küçükse, çıkan sayının bir sonraki basamağından ödünç 1 alınır.... Ancak, çıkarma işlemini ikinin tümleyeni kullanarak yapmak çok daha verimli olacaktır. Yapılması gereken, çıkarılan sayının ikinin tümleyeni alınıp diğer sayıya eklenerek sonucun bulunmasından ibarettir. +7'den +6'yı çıkaralım:
0111 (+7) 0111 (+7)
- 0110 (+6) + 1010 (-6)
0001 (+1) (1)0001 -> 1 eldesi atılır.
İşaret ikili dahil olmak üzere çıkarılanın ikinin tümleyeni alınarak diğer sayıya eklenir. İşaret ikillerinin toplanması sonucu oluşacak elde atılır.
Çıkarma işleminde iki sayının da işareti aynıysa bir taşma oluşmaz. Aksi takdirde, sayıların değerine göre taşma söz konusu olabilir.
Donanım ile çarpma işlemi
İki bitlik iki sayının çarpımı
Yazılım ile çarpma işlemi
Aşağıda işaretsiz çarpma işlemi için yazılım algoritması verilmiştir.
İşaretle genişletme, bilgisayar aritmetiğinde sayıların değerlerini ve işaretlerini kaybetmeden genişletilmesine verilen addır. Daha açıklamak gerekirse, gereken bit değerinden daha kısa olan bir değerin (sayı, vb. nin) en anlamlı (en soldaki) bit değeri ile, gereken bit değerine ulaşıncaya kadar genişletilmesi işlemidir. Böylelikle 2'nin tümleyeni sayı sistemi içinde, artı ve eksi işaretli sayıların hem değerleri hem de işaretleri korunmuş olur.
Örnekle anlatmak gerekirse 8 bitlik "0000 1011" (onluk sayı tabanında 11) sayısının önüne sıfırlar ekleyip (8 adet), 16 bitlik "0000 0000 0000 1011" i (onluk sayı tabanında 11) elde etmek. Diğer bir örnek için ise "1000 0000" (onluk sayı tabanında -128) alınıp, önüne gereken miktarda (8 adet) 1 konulursa elde edilecek sayı "1111 1111 1000 0000" (onluk sayı tabanında -128) olacak, ve yine bit sayısı genişletilip kullanıma uygun hale getirilirken, sayıların ifade ettikleri değerler sabit kalacaktır.
Özellikle işlemcilerin buyrukları içerisindeki anlık değerleri kullanabilmek için hayati önem taşır.
YoRuMSuZ, 3 Kasım 2010, Paylaşıldığı Yer: PowerPoint Sunuları
Suskun, 7 Kasım 2010, Paylaşıldığı Yer: Matematik & Geometri
ZeyNoO, 16 Aralık 2010, Paylaşıldığı Yer: İnternet
Suskun, 7 Nisan 2011, Paylaşıldığı Yer: Matematik & Geometri