SORU
14 Temmuz 2009, Salı


Neden'in iki negatif sayıları göstermek için kullanılan bir tamamlayıcıdır?

Eğer ikili -1 temsil etmesi için iki tamamlayıcı olarak kullanılır. bir nedeni varsa merak ettim: bit saygısız ve ekleme 1?

-1 negatif bayrağı olarak ilk bit ile ikili 1 11111111 (iki tamamlayıcı) yerine (bana) sezgisel 10000001 tarafından temsil edilir.

Yasal Uyarı: benim işim için ikili aritmetik güvenmem!

CEVAP
14 Temmuz 2009, Salı


Ayrıca negatif sayılar ile başa çıkmak için özel bir mantığı olması gerekmez böylece bitti. the article on Wikipedia Check out.

İki numara, 2 ve -1 var. "Sezgisel" temsil eden sayılar, 0010 1001 sırasıyla (boyut için 4 bit kadar arkasındayım) olacaktır. İki şekilde tamamlayan, 0010 1111. Şimdi, hadi onları da eklemek istiyorum ki.

İki ayrıca çok basit bir tamamlayıcısı. Sayıları normalde ekleyin ve sonunda herhangi bir carry bit atılır. Aşağıdaki gibi ekledi

  0010
  1111
=10001
= 0001 (discard the carry)

0001 "2 (-1)". sonucu ne bekliyorduk ki 1,

Ama senin "" yöntemi, ekleme daha karmaşıktır: . sezgisel olarak

  0010
  1001
= 1011

Hangi -3, değil mi? Basit ayrıca bu durumda işe yaramıyor. Sayılardan biri negatif olduğuna dikkat etmek gerekir ve eğer durum bu ise farklı bir algoritma kullanın.

Bu "" depolama yöntemi, çıkarma ayrıca daha farklı bir işlemdir, eklenebilir önce. sayıları ek denetimler gerektiren sezgisel için En temel işlemleri (toplama, çıkarma, vb.) mümkün olduğunca hızlı olmak istiyorsanız bu yana, en basit algoritmalar mümkün kullanmanızı sağlayan bir şekilde numaraları kaydetmeniz gerekir.

Ayrıca, "" depolama yöntemi, iki sıfır . sezgisel olarak

0000  "zero"
1000  "negative zero"

Sezgisel olarak aynı sayıda ama saklı zaman iki farklı değerleri var. Her uygulama için ek adımlar, sıfır değerleri de negatif sıfır değil emin olmak için almak gerekir.

İn bu şekilde depolama ile başka bir bonus var, ve bu değer saklı olduğu kasanın genişliğini genişletmek için ihtiyacınız olduğunda. İki tamamlayıcı, 4-bit, 8-bit bulunan kayıt sayısı bir depolama en önemli bit yinelenen bir konudur

    0001 (one, in four bits)
00000001 (one, in eight bits)
    1110 (negative two, in four bits)
11111110 (negative two, in eight bits)

Sadece küçük kelimenin biti bakıyor ve daha büyük kelime genişliği yastıkları kadar tekrar meselesi.

Yöntemi ile dolgu için ayrıca ekstra bir işlem olan mevcut bit, temizlemek için ihtiyacınız olacak:

    0001 (one, in four bits)
00000001 (one, in eight bits)
    1010 (negative two, in four bits)
10000010 (negative two, in eight bits)

Hala" 5 bit de temizlemek gerekir. "sezgisel olarak her iki durumda da, ama bu ekstra 4 bit kurmamız gerekiyor En temel ve ortak operasyonlar her uygulama mevcut birinde küçük bir ekstra adım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EvilControllers

    EvilControll

    20 Ocak 2008
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • Metheud

    Metheud

    9 EYLÜL 2006