Kezdőoldal » Számítástechnika » Egyéb kérdések » El tudja v. ki magyarázni...

El tudja v. ki magyarázni pontosan mi is az a kettes komplemens?

Figyelt kérdés

Azt tudom hogyan kell képezni, de nem értem miért kell először megfordítani a biteket, aztán hozzáadni egyet. Ugye ezt kell hozzáadni az eredeti kissebbítendőhöz. Ezzel összeadásra vezettem vissza egy kivonást. Ezt tízes számrendszerben is meg lehet csinálni.

Például: 8-3=5, 8+(-3)=5. Ezért logikus lenne, ha a kettes komplemens a szám ellentettje lenne. Ezt sem értem, mert egy kettes k. teljesen úgy néz ki, mint egy normál pozitív szám. Na mármost, ha ezt hozzáadom az eredeti kissebbítendőhöz, nem a kivonás eredménye jön ki, hanem egy teljesen másik összeadás eredménye. Ezért kell lehúzni a túlcsordult biteket. De ennek az egésznek nem értem a logikáját.



2014. jún. 13. 12:29
1 2
 1/11 anonim ***** válasza:
a kettes komplemens 1. bitje jelzi, hogy a szám pozitív(0) vagy negatív(1) e
2014. jún. 13. 12:51
Hasznos számodra ez a válasz?
 2/11 anonim ***** válasza:
A képzést azt most hagyd, nem az a lényeg, hanem az, hogy ami egyébként az unsigned max int, az lesz a -1.
2014. jún. 13. 14:34
Hasznos számodra ez a válasz?
 3/11 A kérdező kommentje:

#2/1: Igen, vannak egyszerű esetek, mint például:


1110 =14 egyes k.:1011 1110

-0100 =4 kettes k.:1100 =-4 +1100

11010=1010 =10(dec)

Ez teljesen világos, 0100 kettes komplemense(ellentettje)1100. Csak az előjelbit változott. De vannak nehezebb esetek:


1010110 =86 e.k.:1001100 1010110

-0110011 =51 k.k.:1001101=-13 +1001101

10100011=100011 =35

Az eredeti kivonandó dec.-be átszámolva 51, de a kettes komplemense -13. Legalábbis nekem úgy tűnik, mert ott a negatív előjelbit(1) és utána a 001101 13-at jelent, nem 51-et. Viszont kijön a várt eredmény(35).

Vagy egy másik példa:

110001

110001 =49 e.k.:001100 +001101

-110011 =51 k.k.:001101=+13 111110 =-2


Az eredeti kivonandó itt is 51 és a kettes komplemense is 13, csak +13 a pozitív előjelbit miatt(0). De lehet egyáltalán kettes k. pozitív? Mert annak nem sok értelmét látnám. Az eredmény -2. De ha nem váltottam volna át az egészet dec-be, és nem tudtam volna, hogy -2 nek kell kijönnie, honnan tudtam volna mennyi az előjelbit az öt darab egyesből? Meg tudnád ezeket magyarázni?


#2/2: Bocsánat, de nem igazán értettem a válaszodat. 12 éves vagyok és nem tudok programozni. Mi az az unsigned max int? Kifejtenéd egy kicsit bővebben a válaszod?

2014. jún. 15. 12:42
 4/11 A kérdező kommentje:
Elnézést, a számok nagyon elcsúsztak. Nem tudok velük mit csinálni.
2014. jún. 15. 12:46
 5/11 anonim ***** válasza:
100%

Első és legfontosabb: ha ránézel valami szám bináris reprezentációjára, te nem fogod azt megmondani, hogy az most előjeles, k.k., offset vagy mi. Attól függ, hogy hogy értelmezed.


Kettő: ez az egész cucc a digitális technikában gyökerezik, ahol például meg akarsz etetni egy összeadóval 2 bináris számot, és nem árt, ha a jó eredmény jön ki.


Az, hogy mondjuk (logikusan) egy negatív szám ugyanúgy néz ki, mint az abszolútértéke, csak az előjelbit különbözik, az egy korrekt felírás, csak a műveletvégzés eléggé nehézkes vele. Erre jó a kettes komplemens.


[link]


Innen az utolsó diáig ha megnézed, szerintem érteni fogod.

2014. jún. 15. 16:13
Hasznos számodra ez a válasz?
 6/11 anonim ***** válasza:

Esetleg ha nem világos, próbáld összehasonlítani, hogy mondjuk 4 biten csak pozitív számokat ábrázolunk (0)-(15) (ez az unsigned = előjel nélküli) és a kettes komplemenst (-8)-(7)


(a pont csak az igazítás miatt van)


US BINR KK

15 1111 -1

14 1110 -2

13 1101 -3

12 1100 -4

11 1011 -5

10 1010 -6

.9 1001 -7

.8 1000 -8

.7 0111 7

.6 0110 6

.5 0101 5

.4 0100 4

.3 0011 3

.2 0010 2

.1 0001 1

.0 0000 0


A számok sorrendjét ha megfigyeled, szerintem minden érthetőbb.

A számtartomány felső felében a negatív számokat ábrázoljuk (vagy jobban mondva inkább a számtartomány felső felét _értelmezzük_ negatívként).


Ha mondjuk írásban az 1111-hez kellene adnod 0001-et, mit csinálnál?

Szépen összeadnád, kijönne, hogy 10000, viszont az utolsó (legfelső) bit nem fér sehova, úgyhogy simán 0000 lesz -> KK -> -1 + 1 = 0000

2014. jún. 15. 16:29
Hasznos számodra ez a válasz?
 7/11 A kérdező kommentje:

Köszönöm szépen a magyarázatot, kezdem érteni.

De ennél a kivonásnál valamiért sehogy sem jött ki a jó eredmény: 10110-100111. Megoldanád nekem?

2014. jún. 17. 10:05
 8/11 anonim ***** válasza:
Ezek nem egyforma hosszúak. Most melyik az előjelbit? 0,1?
2014. jún. 17. 14:15
Hasznos számodra ez a válasz?
 9/11 A kérdező kommentje:
Kell előjelbit? Nem lehet csak két sima pozitív szám?
2014. jún. 19. 20:47
 10/11 anonim válasza:

Az egyes komplemenst úgy kapod, hogy a bitek ellentettjét veszed.

A kettes komplemenst pedig úgy, hogy az egyes komplemenshez hozzáadsz egyet.


Kivonás összeadásra való visszavezetése:

Két számot úgy tudsz kivonni egymásból, ha veszed a kivonás második tagjának a kettes komplemensét.


Hogy mért nem jó csak egyes komplemenst használni, nos a legegyszerűbb ezt belátni úgy, hogy mondjuk van 8 bited és mondjuk 8-ból ki akarsz vonni nullát.

Mi is a nulla 1-es komplemense? (1 1 1 1 | 1 1 1 1)

Látható, hogy ha ezt hozzáadod a (0 0 0 0 | 1 0 0 0)-hoz, akkor nem 8-at fogsz kapni, hanem (0 0 0 0 | 0 1 1 1)-et, azaz 7-et. De ha hozzáadsz 1-et (ez a kettes komplemens), akkor a csupa 1-esből 0 lesz, és úgy már kijön az eredmény.


De az egyes komplemenses esetben miért jön ki 7? Nos azért mert a csupa 1-es egy akárhány bites (fixpontos) típusban -1. Ezt be is tudjuk bizonyítani, ugyanis 8-ból mit kell kivonni, hogy 7-et kapjak? 1-et:

(0 0 0 0 | 0 0 0 1) -> (+1)

(1 1 1 1 | 1 1 1 0) -> egyes komplemens

(1 1 1 1 | 1 1 1 1) -> kettes komplemens (-1)

Meg is kaptuk a mínusz 1-et.


Nézzünk még 1 példát, vonjunk ki 8-ból 2-őt:

(0 0 0 0 | 0 0 1 0) -> (+2)

(1 1 1 1 | 1 1 0 1) -> egyes komplemens


(1 1 1 1 | 1 1 1 0) -> kettes komplemens (-2)

(0 0 0 0 | 1 0 0 0) + (+8)

(0 0 0 0 | 0 1 1 0) = 6


Szóval nem mást használunk ki ilyenkor, mint a túlcsordulást. Mivel 9. bitre esne az az 1-es, ennél az utolsónál, de nincs 9. bitünk, így azzal nem kell foglalkoznunk.


Másik szemszögből magyarázva:

+8-nak a negáltja (egyes komplemense) 247 (most felejtsük az előjel bitet egy pillanatra). Egymást 255-re egészítik ki, ami 8biten a legmagasabb ábrázolható szám.

Tegyük fel 20-8 eredményét akarjuk => +12

20 + 247(ez a negáltja a 8-nak) = 267 => túlcsordultunk!

267 kettes számrendszerben ábrázolva:

(1 | 0 0 0 0 | 1 0 1 1)


Ha a 9. bitet nem ábrázoljuk (nem is tudjuk 8 biten):

(0 0 0 0 | 1 0 1 0) = +11-et kapunk, +12 helyett.


A 9. bit értéke 256. 8 biten a legmagasabb ábrázolható szám 255. Mennyi is köztük a különbség? Pont egy. Tehát

a 9. bitet elfelejtjük, hozzáadunk 11-hez 1-et, és meg is kapjuk a 12-őt. (Ez pont a kettes komplemens, amit itt csináltunk).

2018. jún. 17. 21:22
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!