Neden tamamlayıcı ve tamamlayıcıya ihtiyacımız var?

İşaret biti nedir? Neden bir işaret parçası var?

Burada, ondalık sayıların ikili sayılara dönüşümünü tanıttım. Buradaki birçok insanın mantıksal sağa kaydırmada ve aritmetik sağa kaymada belirtilen işaret biti ve tamamlayıcı hakkında şüpheleri var. Bu, işaret biti, taşma, orijinal kod, kişinin tamamlayıcısı ve tamamlayıcısı dahil olmak üzere birkaç önemli kavramı içerir. Bu noktaların giriş ve çıkışlarından detaylı olarak bahsedeyim.

Her şeyden önce, işaret bitinin ne olduğuna ve neden bir işaret biti olduğuna bakalım. Tek bir cümlede özetlemek gerekirse, işaret biti işaretli ikili sayıdaki en yüksek bittir ve negatif bir sayıyı temsil etmesine ihtiyacımız var.

Gerçek donanım sisteminde, bilgisayar CPU'sunun aritmetik birimi bir çıkarıcı değil, yalnızca bir toplayıcı uygular. Peki bilgisayar çıkarma işlemini nasıl yapıyor? Bunu negatif bir sayı ekleyerek başarabiliriz. Örneğin 3-2, 3 + (- 2) olarak kabul edilebilir. Bu nedenle, negatif sayıların temsili, bilgisayarlarda ikili çıkarma için gereklidir.

Öyleyse, bir sonraki soru, bilgisayarın hangisinin olumlu hangisinin olumsuz olduğunu anlamasını nasıl sağlayacak? Bu nedenle, insanlar ikili sayıları işaretli sayılara ve işaretsiz sayılara böler.

İşaretli bir sayı ise, en yüksek bit işaret bitidir. İşaret biti 0 olduğunda, değerin pozitif olduğu anlamına gelir; işaret biti 1 olduğunda, değerin negatif olduğu anlamına gelir. Örneğin, 8 bitlik işaretli bir ikili sayı 10100010, en yüksek bit 1'dir, bu da negatif bir sayı olduğu anlamına gelir.

İşaretsiz bir sayı ise, o zaman en yüksek bit işaret biti değil, ikili sayının bir parçasıdır.Örneğin, 8 bitlik işaretsiz ikili sayı 10100010. İlk dersin içeriğini onu dönüştürmek için kullanabiliriz. Ondalık sayı 162'dir. Negatif sayılar için işaret biti olmadığından, tüm işaretsiz ikili bitler pozitif sayıları temsil eder.

Java gibi bazı programlama dilleri, sayılarla ilgili tüm veri türlerinde işaretli bitlere sahiptir ve C dili gibi bazı programlama dillerinde işaretsiz int gibi işaretsiz int veri türleri bulunur.

Bakalım taşma nedir?

Matematik teorisinde, sayılar sonsuz ve sonsuz küçük olabilir. Bununla birlikte, gerçek bilgisayar sistemlerinde, her zaman fiziksel bir sınır vardır (transistörlerin boyutu ve sayısı gibi), bu nedenle sonsuz veya sonsuz küçük sayıları temsil etmek imkansızdır. Bilgisayarlar için, hangi veri türü olursa olsun, bir üst ve alt sınır vardır.

Java'da, int türü 32 bittir ve maksimum değeri 2 ^ 31-1'dir (en yüksek bit işaret bitidir, bu nedenle 32 yerine 2'den 31'e kadardır) ve minimum değer alt sınırdır. -2 ^ 31. Uzun tür 64 bittir ve üst sınır olan maksimum değeri 2 ^ 63-1'dir; alt sınır olan minimum değer -2 ^ 63'tür.

N bitlik sayı türü için işaret biti 1 ve sonraki n-1 bitlerinin tümü 0'dır. Bu durumu 2 ^ (n-1) yerine -2 ^ (n-1) olarak temsil ediyoruz. Belirli bir sayı bu sınırları aştığında, taşma meydana gelecektir. Üst sınır aşılırsa buna taşma denir. Alt sınır aşılırsa buna alttan taşma denir.

Peki taşmadan sonra ne olur? Size yukarıdaki taşmayı örnek olarak açıklayayım.

Bir n basamaklı sayının en büyük pozitif değeri 0 işaret bitine sahiptir ve kalan n-1 bitlerinin tümü 1'dir. Bir bit daha 1 işaret biti olur ve kalan n-1 bitlerinin tümü 0'dır. İşaret biti 1 ve sonraki n-1 bitlerinin hepsi 0'dır. Bunun -2 ^ (n-1) anlamına geldiğini söylemiştik.

Yani taşmadan sonra, alt limitten başlayarak en büyük değer 1 artırılır, sonra en küçük değer olur ve tekrar tekrar tekrar eder, bu kalan ve modulo kavramı değil mi? Aşağıdaki şekil anlamanıza yardımcı olabilir.

Sağ yarıdaki noktalı çizgi, aşılan aralığı gösterir ve anlamanızı kolaylaştırmak için, noktalı aralıktaki taşmaya karşılık gelen sayıyı da işaretledim. Buradan, bilgisayar verilerinin taşmasının modulo'ya eşdeğer olduğu görülebilir. Modülü almak için kullanılan bölen, üst sınır eksi veri türünün alt sınırı, artı 1, yani (2 ^ (n-1) -1) - (- 2 ^ (n-1)) + 1 = 2x2 ^ (n-1) -1 + 1 = 2 ^ n-1 + 1.

Merak ediyor olabilirsiniz, neden bu bölücüyü doğrudan 2 ^ n olarak yazmıyorsunuz? Bunun nedeni, 2 ^ n'nin zaten n + 1 bit olmasıdır, bu da n bitin temsil edebileceği aralığın ötesindedir.

İkili orijinal kod, birinin tamamlayıcısı ve tamamlayıcısı

İşaret bitini ve taşmasını anladıktan sonra, orijinali, kişinin ikilinin tamamlayıcısı ve tamamlayıcısı ve neden onlara ihtiyacımız olduğundan bahsedeceğim.

Orijinal kod, gördüğümüz ikilinin orijinal temsilidir. İşaretli ikili için, orijinal kodun en yüksek biti işaret bitidir ve kalan bitler dijital ikilinin mutlak değerini temsil etmek için kullanılır. Yani +2'nin orijinal kodu 000 010 ve -2'nin orijinal kodu 100 010'dur.

Öyleyse, çıkarma hesaplamasını gerçekleştirmek için negatif sayının orijinal kodunu doğrudan kullanabilir miyiz? cevap olumsuz. Hala örnek olarak 3 + (- 2) alıyorum.

Java'da 2'yi temsil etmek için 32 bitlik bir tam sayı kullandığımızı varsayalım, ondalık sayı 000 010. En düşük iki rakam 10'dur ve ilk yüksek rakam 0'dır. 100 010 olan -2'nin orijinal kodunu kullanırsak, 100 0101 elde etmek için orijinal ikili kodu 3000 011 ve orijinal ikili kodu -2100 010 ekleriz. Özel hesaplamalar için, çizdiğim bu resmi görebilirsiniz.

İkili koddaki toplama ve çıkarma, ondalık sisteme benzer, ancak ek olarak, ondalık sistem ileri taşınmadan önce 10 ile dolu ve ikili toplamada, 2 ile dolu olduğu sürece taşınır; benzer şekilde, çıkarma işleminde ikili ödünç alma 2'ye eşittir. 10 değil.

Toplamanın sonucu ikili 100 ... 0101, en yüksek bit 1, yani negatif bir sayı ve en düşük 3 bit 101, yani 5, yani sonuç orijinal kod -5 ve 3 + (- 2) olmalı 1'e eşittir ve ikisi eşleşmez.

Negatif bir sayının orijinal kodu çıkarmaya uygun değilse ne yapmalıyız? Bu sorunun cevabı aynı zamanda bilgisayarın taşma mekanizmasına da bağlıdır.

Az önce overflow ve modulo'nun özelliklerini tanıttım, bilgisayardaki çıkarma işlemini dönüştürmek için bundan tam olarak yararlanabiliriz. İ-j olduğunu varsayalım, burada j pozitif bir sayıdır. Modül bölenine i-j eklenirse, bir taşma oluşacaktır ve istediğimiz i-j işleminin sonucunu alabiliriz. Söylediğim şeyi hala anlamak kolay değilse, aşağıdaki resme bakabilirsiniz.

Bu işlemi i-j = (i-j) + (2 ^ n-1 + 1) = i + (2 ^ n-1-j + 1) şeklinde bir ifadede yazıyoruz.

Bunların arasında, 2 ^ n-1'in ikili kodu, işaret bitine bakılmaksızın n-1 bitin 1'idir, bu nedenle 2 ^ n-1-2'nin sonucu aşağıdaki gibidir:

Sonuçtan, 2 ^ n-1-j denen şeyin, bitsel olarak ters çevrilmiş işaret biti dışında, pozitif sayı j'nin orijinal ikili koduna eşdeğer olduğu gözlemlenebilir (0, 1 olur ve 1, 0 olur). Negatif sayı -j ve pozitif sayı j'nin orijinal kodu, işaret biti dışında aynı olduğundan, 2 ^ n-1-j, işaret biti dışında, negatif sayı -j'nin ikili orijinal koduna da eşdeğerdir. anti. 2 ^ n-1-j'ye karşılık gelen kodu negatif -j'nin ters kodu olarak adlandırıyoruz. Bu nedenle, -2'nin tümleyicisi 1111 ... 1101'dir.

Ters kod tanımıyla, i-j = i + (2 ^ n-1-j + 1) = i'nin orijinal kodunu + (-j'nin ters kodu) +1 elde edebiliriz.

-J'nin tümleyicisine 1 eklersek ve bunu -j'nin tümleyicisi olarak tanımlarsak, orijinal i-j = i + kodunu (-j'nin tümleyicisi) elde edebiliriz.

Pozitif sayıların eklenmesi, negatif sayıların eklenmesi gibi dönüşümler gerektirmediğinden, orijinal kod, ters kod ve pozitif sayıların tamamlayıcısı aynıdır. Son olarak, i-j = i'nin tümleyen + (-j'nin tümleyicisi) elde edebiliriz.

Başka bir deyişle, bilgisayar kodu tamamlayarak doğru bir şekilde ikili çıkarma işlemi gerçekleştirebilir. Doğrulamak için 3 + (- 2) kullanalım. Pozitif 3'ün tamamlayıcısı hala 0000 0011'dir ve -2'nin tümleyicisi 1111 1110'dur, ikisini toplayın ve son olarak ikili olarak doğru 1 sonucunu alın.

Taşma işleminin bilgisayar veri türlerinin bir sınırlaması olduğu görülebilir, ancak negatif sayıların eklenmesinde bize çok yardımcı olabilir.

Son olarak, size bir düşünce sorusu bırakın. Bir negatif sayının tümleyicisi ve tümleyicisi olan orijinal kodu anladıktan sonra, hangi ondalık sayının 8 bitlik işaretli 10100010 ikili sayıya karşılık geldiğini anlayabilir misiniz?

Eh, ikili ile ilgili tamamlayıcı içerik için bu kadar.

----- Kuru malları takip etmek ve dinlemeye devam etmek için yukarıya tıklayın

Eğitim videosu için özel mesaj "888"

Veya almak için 733234221 grubunu ekleyin

Bebeğin cinsiyeti temmuz ayında belli mi? TVB'nin eski popüler Hua Dan Sun kocasıyla tatlı bir fotoğraf çekti!
önceki
5 yılda 5 milyar ABD doları! Sıfırların sayısını sayın
Sonraki
321 Aşk mavi bir gökyüzü ve çöl gibidir ... Air Max 97 "ÇÖL VE GÖKYÜZÜ" satışa çıktı!
88 sade ve ferahlatıcı İskandinav tarzı, sıcak ve tatlı tek kişilik daire
Programcılar matematiği nasıl öğrenmelidir?
Puanlar neden düşülür? Bir kez bakın ve bu satırlardan hiçbirinin basılamayacağını anlayın!
24 evlada dindar kız arkadaşını övdü! TVB Huadan'dan erkek arkadaşı için kek pişirmesini istedi: Parmaklar maviye döndü
Arabaya bin! Hainan Adası Adası Turu için özel rehber sizi yetiştirecek!
Çin stili + Amerikan tarzı karışımı ve eşleştirme stili, ev dekorasyonu çok gelişmiş!
Sheep Sir Hot Yorum: En yüksek çekicilik endeksine sahip marka mı? J.D. Power, dalga mı geçiyorsun?
Erkek bileti bu açıdan çok güçlü, ağlamalı mıyım yoksa gülmeli miyim? (Test soruları ile)
Haftada listelenen yeni arabalara ilişkin yorum: 31 Ekim Jiuxinglianzhu Neden o gün pazarda bir araya gelelim?
Paris 20.000 Supreme mi satın alacak? "YOHO! Trends" in baş editörü sizi Moda Haftası'na götürüyor
Sistem CPU darboğazının nerede olduğu hızla nasıl analiz edilir?
To Top