İşaretli İkili Sayılar / Signed Binary Numbers

işaretli ikili sayılar
Sayı Sistemleri Serisi
İkili Sayı Sistemiİşaretli İkili Sayılarİkili Kesirler
İkili – Onluk Dönüşümüİkili Kodlanmış Onluk Sayılar (BCD)
On Altılı Sayı SistemiSekizli Sayı Sistemi

işaretli ikili sayılar, sayının pozitif mi yoksa negatif mi olduğunu belirlemek için En Anlamlı Biti (MSB – Most Significant Bit) bir işaret biti olarak kullanır.

Matematikte pozitif sayılar (sıfır dahil) genellikle işaretsiz olarak yazılır. Yani sayının pozitif olduğunu belirtmek için sayının başına her zaman “+” işareti koymayız. Ancak negatif sayılarla uğraşırken, sayının değerinin sıfırın altında olduğunu ve pozitif eşdeğerinden farklı olduğunu göstermek için mutlak değerin önüne bir “-” (eksi) işareti ekleriz. Aynı mantık dijital sistemlerdeki işaretli ikili sayılar için de geçerlidir.

Bununla birlikte, dijital donanımlar ve bilgisayarlar yalnızca “0” ve “1” gerilim seviyeleriyle (ikili rakamlar – bitler) çalıştığı için, doğrudan artı veya eksi işaretini belleğe koyma gibi bir imkanımız yoktur. Her türlü veri, bu bit‘ler (Binary digit kısaltması) aracılığıyla ifade edilmek zorundadır.

Daha önceki konularda, 8 bitlik (bir bayt) işaretsiz bir ikili sayının 0 (00000000_2) ile 255 (11111111_2) arasında değerler alabildiğini, yani toplam 2^8 = 256 farklı kombinasyona sahip olduğunu görmüştük. Örneğin işaretsiz bir sayı olan 01001101_2, ondalık sistemde 64 + 8 + 4 + 1 = 77_{10} değerine eşittir. Ancak bilgisayarların günlük işlemlerde sadece pozitif sayıları değil, negatif sayıları da kullanabilmesi ve işleyebilmesi gerekir.

Matematiksel olarak bir sayı genellikle iki kısımdan oluşur: Sayının yönünü (pozitif veya negatif) belirten bir işaret ve sayının büyüklüğünü (değerini) gösteren bir mutlak değer. Örneğin: +23, +156 veya -274. Bu format dijital sistemlere uyarlandığında İşaret-Büyüklük (Sign-Magnitude) gösterimi adını alır. Çünkü en soldaki bit (MSB) işareti belirtmek için ayrılırken, geri kalan bitler sayının büyüklüğünü ifade eder.

İşaret-büyüklük gösterimi, sıfırın her iki tarafındaki pozitif ve negatif sayıları temsil etmenin en basit yöntemlerinden biridir. Negatif bir sayı, karşılık gelen pozitif sayının sadece işaret biti değiştirilerek elde edilir (Örn: +10 ve -10). Detaylı bilgi için İkili Sayı Sistemi Vikipedi sayfasına bakabilirsiniz.

Peki elimizde sadece 1’ler ve 0’lar varken işareti nasıl temsil edeceğiz? Bir işaretin sadece iki durumu vardır: “+” (artı) veya “-” (eksi). Aynı şekilde bir ikili bitin de sadece iki durumu vardır: “0” veya “1”.

Bu uyum sayesinde, işaretli bir ikili sayının pozitif mi negatif mi olduğunu belirtmek için tek bir biti feda edebiliriz. İşaretli ikili sayılarda en soldaki bit olan MSB, işaret biti olarak görev yapar.

  • Eğer işaret biti “0” ise, sayı pozitiftir (+).
  • Eğer işaret biti “1” ise, sayı negatiftir (-).

Geriye kalan bitler ise (standart işaretsiz sayılarda olduğu gibi) sayının mutlak büyüklüğünü (değerini) temsil eder.

İşaret-Büyüklük (SM) gösteriminde, n bitlik bir sayının alanı ikiye bölünür: 1 bit işaret için ayrılır, geriye kalan n-1 bit ise değer (büyüklük) için kullanılır. Örneğin, +53_{10} ondalık sayısının 8 bitlik işaret-büyüklük ikili formatındaki gösterimi aşağıdaki gibidir:

Pozitif işaretli ikili sayı
Pozitif işaretli ikili sayı (+53)
Negatif işaretli ikili sayı
Negatif işaretli ikili sayı (-53)

Buradaki temel dezavantaj, n bitlik bir alanın tamamını sayının değeri için kullanamamamızdır. İşaret için bir bit feda ettiğimizden, temsil edebileceğimiz maksimum değer aralığı n-1 bite düşer. İşaret-büyüklük gösteriminde temsil edilebilir aralık formülü şu şekildedir:

-(2^{n-1} - 1) ile +(2^{n-1} - 1)

Örneğin, 4 bitlik işaretli bir sayımız varsa (1 bit işaret, 3 bit değer), temsil edebileceğimiz değer aralığı:

-(2^{4-1} - 1) ile +(2^{4-1} - 1)

-(2^3 - 1) ile +(2^3 - 1)

-7 ile +7 arasındadır.

Hatırlarsanız 4 bitlik işaretsiz bir sayının aralığı 0 ile 15 arasındaydı. Bir işaret biti ekleyerek erişebildiğimiz maksimum pozitif değeri yarı yarıya düşürmüş olduk.

İşaret-Büyüklük formunun bir diğer büyük dezavantajı ise çift sıfır (double zero) sorunudur. Bu yöntemde sıfır sayısının iki farklı gösterimi oluşur: Pozitif sıfır (+0 = 0000_2) ve negatif sıfır (-0 = 1000_2). Matematiksel olarak ikisi de geçerli görünse de, dijital mantık devrelerinde sıfırın iki farklı değere sahip olması karşılaştırma işlemlerini karmaşıklaştırır.

İşaret-Büyüklük Örnekleri

Aşağıdaki ondalık değerlerin işaret-büyüklük (sign-magnitude) formundaki ikili gösterimlerini inceleyelim:

-15_{10} (6-bit olarak)\Rightarrow1 01111_2
+23_{10} (6-bit olarak)\Rightarrow0 10111_2
-56_{10} (8-bit olarak)\Rightarrow1 0111000_2
+85_{10} (8-bit olarak)\Rightarrow0 1010101_2
-127_{10} (8-bit olarak)\Rightarrow1 1111111_2

Sayı ister 4-bit, ister 8-bit veya 16-bit olsun, belirlenen veri genişliği (bit sayısı) korunmalıdır. Gerekirse işaret biti ile sayının en yüksek değerli biti arasındaki boşluklar “0” ile doldurulur (padding).

işaretli İki Sayılar Birin Tümleyeni (One’s Complement)

Birin Tümleyeni (1’s Complement), negatif ikili sayıları temsil etmek ve aritmetik işlemleri kolaylaştırmak için kullanılan bir diğer yöntemdir. Birin tümleyeninde, pozitif sayılar işaret-büyüklük yöntemindekiyle tamamen aynıdır ve değiştirilmezler.

Ancak negatif sayılar, karşılık gelen pozitif sayının evriği (inversiyonu) alınarak oluşturulur. Pozitif sayılar her zaman “0” ile başladığından (MSB=0), bunların tümleyeni alındığında negatif sayılar her zaman otomatik olarak “1” ile başlar.

Bir ikili sayının 1’in tümleyenini almak son derece basittir: Sayıdaki tüm “1”ler “0” yapılır, tüm “0”lar ise “1” yapılır. Örneğin 10010100_2 sayısının birin tümleyeni basitçe 01101011_2‘dir.

Dijital elektronik donanım tasarımında, bir sayının tümleyenini almak için paralel bağlı NOT (İnverter) kapıları kullanılır.

İnverter Kullanan Tamamlayıcı
Mantık Kapıları ile Birin Tümleyeninin (1’s Complement) Alınması

İşaret-büyüklük gösteriminde olduğu gibi, birin tümleyeni sisteminde de n-bitlik bir aralık -(2^{n-1} - 1) ile +(2^{n-1} - 1) değerleri arasındadır. 4 bitlik bir sistem yine -7 ile +7 aralığını kapsar ve maalesef çift sıfır sorunu burada da devam eder: 0000 (+0) ve 1111 (-0).

Birin Tümleyeni ile Çıkarma İşlemi

Birin tümleyeninin en büyük avantajı çıkarma işlemini kolaylaştırmasıdır. Matematikte A - B işlemi aslında A + (-B) işlemiyle tamamen aynıdır. Bu prensibi kullanarak, dijital devrelerde çıkarma yapmak için sadece toplama devresi (Adder) ve tümleyen devresi (Inverter) kullanmak yeterlidir.

Örnek olarak ondalık sistemdeki 115 - 27 = 88 işlemini, 8-bitlik birin tümleyeni sisteminde çözelim:

Öncelikle her iki sayının 8-bitlik ikili (pozitif) değerlerini yazarız:
115_{10} \Rightarrow 01110011_2
27_{10} \Rightarrow 00011011_2

Çıkarılan sayı 27 olduğu için (-27 elde etmek için) 27‘nin ikili karşılığının birin tümleyenini alırız (1’leri 0, 0’ları 1 yaparız):
00011011_2 \Rightarrow 11100100_2 (Bu artık -27‘yi temsil eder).

Şimdi 115 ile -27‘yi toplarız:

01110011 (115)
+11100100 (-27)
1 01010111

Sonuç 9 bitlik oldu. En soldaki taşan bit (overflow / carry bit), cevabın pozitif olduğunu gösterir. Birin tümleyeni matematiğinde, taşan bu 1 biti sonucun en sağına eklenerek (End-Around Carry) toplanmalıdır:

01010111
+1
01011000_2

Elde edilen sonuç 01011000_2, ondalık sistemde 64 + 16 + 8 = 88_{10} değerine eşittir ve sonuç doğrudur.

İkinin Tümleyeni (Two’s Complement)

İkinin Tümleyeni (2’s Complement), günümüz modern bilgisayarlarında ve mikroişlemcilerinde negatif sayıları temsil etmek için kullanılan evrensel standarttır. Pozitif sayılar önceki yöntemlerde olduğu gibi aynı bırakılır. Negatif sayılar ise, karşılık gelen pozitif sayıya eklendiğinde sonucu “tam sıfır” yapan bir bit deseni ile temsil edilir.

Pratikte bir sayının İkinin Tümleyenini bulmak çok basittir: Önce sayının Birin Tümleyenini (tersini) alırsınız, ardından sonuca 1 eklersiniz.

İkinin tümleyeninin en büyük avantajı, çift sıfır sorununu tamamen ortadan kaldırmasıdır. Yalnızca tek bir sıfır (0000_2) vardır. Ayrıca toplama ve çıkarma işlemleri çok daha akıcıdır; taşan biti alıp sağa ekleme (End-Around Carry) adımına gerek yoktur. Taşan bit direkt olarak çöpe atılır (yok sayılır).

Aynı örneği (115 - 27 = 88) İkinin Tümleyeni yöntemiyle yapalım:
115_{10} \Rightarrow 01110011_2
27_{10} \Rightarrow 00011011_2

27‘nin İkinin Tümleyenini bulalım:
1. Birin Tümleyeni: 11100100_2
2. 1 ekle: 11100101_2 (Bu İkinin tümleyeninde -27‘yi temsil eder).

Şimdi toplayalım:

01110011 + 11100101 = 1 01011000_2

8-bitlik sistemde çalıştığımız için, 9. biti (taşan 1) doğrudan yok sayarız. Kalan sonuç 01011000_2‘dir, bu da tam olarak 88_{10} sayısına eşittir.

Özetle

Negatif ikili sayıların, En Anlamlı Biti (MSB) işaret biti olarak kullanarak gösterilebileceğini öğrendik. n bitlik işaretli bir sistemde, en soldaki bit işareti gösterirken geriye kalan n-1 bit sayının değerini belirtir.

Bu temel gösterim biçimine İşaret-Büyüklük (Sign-Magnitude) denir. İşaret biti “0” ise sayı pozitif, “1” ise negatiftir. Ancak işaret-büyüklük formunda çift sıfır sorunu vardır ve dijital donanımlar için aritmetik işlem yapmak zordur.

Bunu çözmek için Tümleyen (Complement) yöntemleri geliştirilmiştir. Birin Tümleyeni sisteminde negatif sayılar, bitlerin ters çevrilmesiyle elde edilir. Ancak modern bilgisayar mimarisinde çift sıfır problemini çözen ve aritmetik işlemleri çok daha basit hale getiren İkinin Tümleyeni (2’s Complement) yöntemi evrensel standart olarak kullanılmaktadır.

Aşağıdaki tabloda, 4-bitlik bir veri genişliği için farklı sistemlerin hangi aralıkları kapsadığını görebilirsiniz:

Ondalık (Decimal)İşaret-Büyüklük (Sign-Magnitude)Birin Tümleyeni (1’s Complement)İkinin Tümleyeni (2’s Complement)
+7011101110111
+6011001100110
+5010101010101
+4010001000100
+3001100110011
+2001000100010
+1000100010001
+0000000000000
-010001111
-1100111101111
-2101011011110
-3101111001101
-4110010111100
-5110110101011
-6111010011010
-7111110001001
-81000
Sayı Sistemleri Serisi
İkili Sayı Sistemiİşaretli İkili Sayılarİkili Kesirler
İkili – Onluk Dönüşümüİkili Kodlanmış Onluk Sayılar (BCD)
On Altılı Sayı SistemiSekizli Sayı Sistemi

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.