2011-02-09 14 views
5

Veri türleri aralığını düşünüyordum, bir soru ortaya çıkıyor. İmzaladığımız biliyoruz gibi Karakterin en aralık aldığım -128 ile 127 arasındadır 127 gelir nasıl yani 0111111 = +127, iki tamamlayıcı aritmetiği imzaladı

Ama -128 geliyor nasıl alamadım? eğer biz sadece ON imza biti 11111111 olsun, onun -128 eşittir?

+0

FWIW, 0111111 = 63. –

cevap

0

Negatif sayılar işaret biti 1 olarak ayarlanmış olması ise; -128, işaret biti ayarlı, ancak başka bit içermeyen değerdir (yani, en küçük negatif sayıdır). -128'un ikili temsili, 10000000'dur. Diğer veri uzunlukları için, iki tamamlayıcıdaki en küçük negatif sayı, her zaman doğru sayıda sıfır için 1000... olur.

8

Çoğu zaman, bilgisayarlar, imzalı tam sayıları temsil edecek şekilde 2'nin tamamlayıcısı adını kullanır.

2'nin tamamlayıcı çalışmalarının yolu, olası değerlerin 0'dan MAX_VALUE, MIN_VALUE, sıfıra vb. Büyük bir döngüde olmasıdır.

Minimum değer, maksimum değer olan +1 - 01111111 = 127 ve 10000000 = -128.

Bu imzasız aritmetik ile tam olarak aynı davranan güzel bir özelliği vardır - -2 + 1 yapmak istiyorsanız, imzasız ekleme için tüm aynı donanımı kullanarak, 11111110 + 00000001 = 11111111 = -1 var.

Düşük uçta fazladan bir değer bulunmasının nedeni, yüksek bit kümesiyle tüm sayıların negatif olmasını seçmemizdir, bu da 0'ın pozitif taraftan bir değer alması anlamına gelir.

+1

Burada *, * 11111111'in en düşük temsil edilebilir sayı olduğu ve gerçekten de -127 olduğu - bu "büyüklük" biçimidir. İşaret büyüklüğünde, iki sıfır vardır - sırasıyla "+ 0" ve "-0", "00000000" ve "10000000". – caf

+0

@Asad Hanif, daha fazla yardıma ihtiyacınız var mı? Bu veya başka bir cevap size yardımcı olduysa ve sorunuzu cevapladıysa, lütfen bu cevabı kabul etmeyi unutmayın. Ayrıca bkz. [Bir cevap kabul edildiğinde ne anlama gelir?] (Https://meta.stackexchange.com/help/accepted-answer) "? ve [Neden oy verme önemlidir?] (https://meta.stackexchange.com/help/why-vote)? –

0

Bunu düşünmenin basit bir yolu, 01111111'den başlamak ve daha sonra 1'e sarılıncaya kadar çıkartmaktır; Önceki değer en küçük negatif değerdir. Standart "borçlanma" tekniğini kullanarak 1 00000000'den çıkarma işlemi, 11111111 değerini verir; bu gerçekten de -1 için ikili gösterimdir. -128 olan 10000000 seviyesine kadar çıkarmaya devam edebiliriz ve bir kez daha 01111111 ürününü çıkararak, etrafa sarılabiliriz.

İlgili konular