two's complement
-
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. -
(bkz: three's a crowd)
-
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.
ekşi sözlük kullanıcılarıyla mesajlaşmak ve yazdıkları entry'leri
takip etmek için giriş yapmalısın.
hesabın var mı? giriş yap