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
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.
Neden kullanmıyorsun ya da para birimi...
Neden adresi null işaretçi için kullan...
Bir şekilde git-reflog her girişin yan...
Neden char[] şifreler için Dize Java t...
Neden&; dizi yineleme için... "* o kad...