mikroişlemcilerde aritmetik işlemler ikili mantık üzerinden gerçeklenen toplama işlemi ile yapılır. çıkarma işlemi için sayının ikiye tümleyeni kullanılarak toplamaya göre tersi bulunur ve toplama yapılır. bu yazıda bu işlemin başka sayı tabanları üzerinde gerçeklenebilirliğini irdeledim ve afin gruplardan yararlanarak genel tanımını yapmaya çalıştım.

ikil sayılarda ikinin tümleyeni

ikinin tümleyeni1 işaretli bir ikil sayının toplamaya göre tersini bulmak için kullanılır. işlemler iki adımda gerçekleştirilir. ilk adımda sayıdaki tüm bitlerin tersi alınır. bu adım sayının birin tümleyenini2 ifade eder. ikil sayının bire tümleri bir artırılarak ikiye tümleri elde edilir.

ü

işaretli tam sayılarda en anlamlı bit (MSB) işaret biti olarak kullanılır. bu bitin değerine göre sayının işareti belirlenir.

bu durumda olur. ile toplarsak:

  1010  (-6)   ┌──> (1111)' -> ++0000 -> 0001 (1)
  0101  (+5)   │     
+-----         │     
  1111  (?) ───┘     

sonuç olur. sayı ikinin tümleyeni durumunda olduğundan geriye çevirmek için sayının tümleyeni alınır ve 1 eklenir. elde edilen sonuç 1’dir. yani 1111 sayısı 0001’in toplamaya göre tersi yani ikiye tümleyenidir.

Not

kullanılan bit sayısına göre taşma durumlarında sonuç doğru çıkmayacaktır. bu yazıda bu tür durumlar ele alınmayacaktır.

onluk tabanda ikiye tümler

kolay anlaşılabilmesi için genel tanımlamalar yapmadan önce onluk tabanda bu işlem nasıl olabilir bunu inceleyelim.

tümleme (NOT) işleci ikil sayılarda tanımlı özel bir işlemdir. fakat bu işlemi kullanılan tabandaki rakamların sıralı dizisinde bir simetri alma işlemi olarak ifade edersek taban değeri çift olan sayı sistemlerinde tümleme işlemi ifade edilebilir.

tümleme işlemini sözel olarak aşağıdaki gibi tanımlarsak

üüşşççş

tümleme işlemi toplamları kümenin en büyük elemanına eşit olan iki rakamın birbiriyle yer değiştirmesiyle gerçekleştirilir. bu işlemi aynı zamanda bir simetri işlemi olarak da düşünebiliriz.

ikiye tümler işlemi

bu işlem ikil sayılarda olduğu gibi sayının bire tümlerinin bir artırılmasıyla elde edilir.

bu durumda

işaret basamağı

ikili taban ile benzerlik kurmaya çalışırsak işaret basamağı sayısal anlam ifade etmeyecek ve en büyük basamak değerine sahip basamak olarak belirlenmeli. ayrıca işaret sadece artı ya da eksi olabileceğinden sayısal olarak sadece iki değer alması sağlanmalı. onluk tabanda bu mümkün olmadığından en anlamlı basamağı sayı artı ise 0 eksi ise 9 kabul edebiliriz. bu durumda olacağından tümleme işleminde işimize yarayabilir. 23 sayısının başındaki sıfırı da tümleme işlemine katarsak:

elde edilebilir. bu durumda 977 sayısı 023 sayısının toplama işlemine göre tersidir.

toplamaya göre tersi ile toplanması

şimdi küçük bir sağlama amacıyla ve olmak üzere işlemini gerçekleştirelim.

  • ve biçiminde yazalım.
  • tanıma göre: = olur.
  • bu durumda olur.
  • görüldüğü üzere işaret değişti. olarak elde edilir.

işaret basamağının değişmesini daha iyi anlamak adına işlemini gerçekleştirelim.

-77 için olur. şimdi toplama işlemini gerçekleştirirsek olacaktır. sonuç sıfırdan küçük çıktığı için sağlama adına sayının tersini alalım. olur.

iki durumda da doğru sonucu elde etmişiz gibi gözüküyor.

işlem başlangıcındaki tanımlamalar ve işaret basamağının değişmesi durumu

işlemlerin başlangıcında işaret basamakları aynı basamak olarak belirlenmeli. işaret basamağı iki sayının basamaklarından daha büyük olan basamak olmalı. işaret basamağının birden farklı olduğu her durum sayının sıfırdan büyük olduğunu ifade eder.3 eldenin yüzler basamağını değiştirmesi durumunda işaret basamağının artması sonucunda sayı pozitif olarak değerlendirilir.

ikil sayılarda taşma durumu bitin değişmesine neden olur. ikiden fazla rakamın olduğu gösterimlerde ise eldenin birden farklı olması durumunda işaretin pozitif olduğu varsayımı yapılır.

rakamların tümleyeninin resmi tanımı

bu bölümde tümleme işleminin daha genel bir tanımını yapmaya çalışacağım.

4 bir halka ve S kullanılacak taban olmak üzere rakamlar kümesini temsil etsin. kullanacağımız (tümleme) işleci rakamlar üzerinde tanımlı olacağından bir rakam olmak üzere r = = r % S5 olsun.

bu durumda bir rakamın tümleyeni = ise

olarak tanımlanabilir. . bir rakamın tümleyeni tekrar kendisine eşittir yani olmalıdır.

bu durumda tümleme işlecinin ispatını biçiminde yapabiliriz. eğer sayı tabanı tek sayı ise ortadaki eleman kendini haritalayacaktır. diğer durumlarda ise bire bir haritalama gerçekleşir.

böylece S modüler tabanında bir afin grup6 elde etmiş oluruz.

sayıları rakam dizisi olarak ifade etme

bir A sıfırdan büyük tam sayısı için rakamlarının kümesini A olarak gösterelim. bu durumda B-basamaklı A sayısının rakamlarını içeren A kümesi:

olacaktır.7 bu durumda A sayısı için

toplamını kullanabiliriz.

bir rakamın tümleyeni = = % idi dolayısıyla A sayısının tümleyeni

biçiminde olacaktır. ikiye tümleyeni için bu sayıya 1 eklemek yeterlidir. burada işaret basamağı kavramının ele alınmadığını belirtmek isterim.

Footnotes

  1. two’s complement

  2. one’s complement

  3. biz burada işaret basamağını + 0 ve - 9 olarak tanımladığımızdan aynı duruma karşılık düşer.

  4. şöyle de tanımlanabilir:

  5. % mod

  6. Affine Group of the Ring of Integers Modulo S

  7. burada rakamlar en küçük basamaktan en büyüğe doğru sıralanmıştır.