Ben 2 tamamlayıcı ve 1 ekleyerek bir şey olduğunu biliyorum, ama negatif sayılar söz konusu olduğunda aynı miktarda bit ile bir sayı daha kodlamak nasıl gerçekten anlamıyorum.
Ben 2 tamamlayıcı ve 1 ekleyerek bir şey olduğunu biliyorum, ama negatif sayılar söz konusu olduğunda aynı miktarda bit ile bir sayı daha kodlamak nasıl gerçekten anlamıyorum.
Yanıtlar:
Bu terimlerle düşünün. Önceden işaretli 2 bitlik bir sayı alın:
000 = 0
001 = 1
010 = 2
011 = 3
Şimdi bazı olumsuzluklarımız var:
111 = -1
110 = -2
101 = -3
Bekle, bizde var
100 ...
Olumsuz olması gerekir, çünkü işaret 1 1'dir. Yani mantıklı olarak -4 olmalıdır.
(Düzenleme: WorldEngineer'ın haklı olarak işaret ettiği gibi , tüm numaralandırma sistemleri bu şekilde çalışmaz - ancak sorduğunuzlar bunu yapar.)
Çünkü tamsayı aralığında iki sayı sınıfı yok, ancak üç: negatif sayılar, sıfır ve pozitif sayılar. Sıfırın bir yuva alması gerekir (sıfırı temsil edememek oldukça pratik olmaz ...), bu yüzden pozitif veya negatif sınıf bir yuvadan vazgeçmelidir. Genellikle bu fedakarlığı yapmak zorunda olan pozitif menzilin bir dereceye kadar keyfi olması, ancak bit manipülasyonları seviyesinde bu kararın daha uygun hale getirdiği bazı şeyler vardır.
İkili olarak işaretli tam sayıları temsil etmenin TEMEL üç yolu vardır: 2'nin tamamlayıcısı, 1'in tamamlayıcısı ve işaret büyüklüğü. (Biquinary uzun zaman önce Dodo Bird'ün yolunu tuttu.)
1'in tamamlayıcısı ve işaret büyüklüğü, her biri benzersiz bir temsile sahip iki sıfır değere sahiptir, +0 ve -0. 2'nin tamamlayıcısı sadece bir sıfır değerine ve bir gösterime sahiptir.
Şimdi, N bit alanı 2 ^ N değerini kodlayabilir. 2 tamamlayıcıdan birini çıkarın ve 2 ^ N-1 = 2 ^ (N-1) + 2 ^ (N-1) + 1'iniz var. Sıfır temsili sıfır bit olduğundan ve + işareti sıfır olduğundan, işaret biti 1 olarak ayarlanmış bir olası sıfır olmayan gösterim daha olacaktır.
Bu, 2'nin tamamlayıcısının - (2 ^ (N-1)) .. + (2 ^ (N-1) - 1) değerlerini temsil ettiğini söylemenin çok uzun bir yoludur.
Tamsayı dijital sinyal işleme hesaplamaları yapıyorsanız, 1'in tamamlayıcısı aslında 2'nin tamamlayıcısı üzerinde bir avantaja sahiptir. 1'in tamamlayıcı işlemleri doğal olarak sıfıra doğru kısalır. 2'nin tamamlayıcısı -finity'e doğru kesilir. Bunu ZOR bir şekilde öğrendim ...