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.
1010 (-6) ┌──> (1111)' -> ++0000 -> 0001 (1)
0101 (+5) │
+----- │
1111 (?) ───┘ sonuç
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
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 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
-77 için
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.
bu durumda bir rakamın tümleyeni
olarak tanımlanabilir.
bu durumda tümleme işlecinin ispatını
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
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.