• tam sayılar için kolay bir twos complement bulma yöntemi olarak önce sayının ones complement ini bulup, bulduğumuz sayıya 1 ekleriz.
  • günümüz mimarileri bunu kullanır.
  • bu mimaride kafa karıstıran tek yer ters almadır, yok sıfırdan cıkar yok bir ekle falan kafam karısıyor yahu diyorsanız kuralı biraz farklı yorumlayabiliriz:

    tek kuralımız su: sayıyı sağdan itibaren ilk biri gorene kadar aynen yaz o biri de aynen yaz sonrasını ters cevir.

    mesela 3: 0011

    ters cevirmek istedigimizde ilk bit 1 bunu yazıyoruz sonrasını ters ceviriyoruz:

    -3 : 1101

    bir de en sağ biti sıfır olan bir sayıda ornegimizi verip entrymizi bitirelim:

    -18: 11101110

    ilk bit sıfır ondan sonraki 1, o 1'i de yazıp degistiyoruz:

    18: 00010010
  • örneğin 0101 (5) sayısını negatife çevirmek için

    ilk olarak sayının complementi alınır. yani 1 leri 0, 0 ları 1 olarak değiştiriyoruz.

    1010

    daha sonra sayıya 1 ekleriz.

    1010
    1
    +------
    1011 (-5)

    başındaki 1, sign bit olarak geçer. eğer binary ifadede sign bit 1 ise negatif, 0 ise pozitiftir.
  • ters alma sırasında karıştıracak pek bi şey yok aslında.
    söylendiği gibi önce 1's complement alınır. bu da her sayının tersini almaktır. mesela sayımız:
    00100100 olsun. bunun 1's complementi;
    11011011 dir.

    2's complement bulmak için de 1's comp. a 1 eklersiniz;
    11011011 + 1

    11011100 olur o da. bu da ilk sayımızın 2's complement i olmuş olur.
  • https://en.wikipedia.org/wiki/two's_complement

    adresinden kendisi hakkinda ek bilgiye ulasabilirsiniz.
  • bir diğer mesele overflow durumudur. negatif sayıların binary'leriyle aritmetik işlemler yapıyorsak +1 overflow'ların ignore edilmesi meselesi vardır:
    https://stackoverflow.com/…rflow-in-twos-complement
  • iki two's complement sayıyı toplayıp çıkarırken overflow sadece sign bitinin carry in'inin carry out'una eşit olmaması durumunda gerçekleşir.
    (bkz: xor)
  • pratik yolunda ters almaya falan gerek olmayan form.

    unsigned formda örneğin 1110 binary sayısının karşılığı decimal olarak nedir, soldan başlayıp toplayalım: 1x8+1x4+1x2+1x0 = 14. peki signed olunca ne olur? bu sefer en sol baştaki bit -8 olur, diğerleri aynı kalır. tekrar toplayalım, (1x-8)+1x4+1x2+0=-8+4+2=-2. o zaman signed 1110 = -2'dir.
hesabın var mı? giriş yap