Információs technológia

Kettes komplemens

avagy hogyan gondolkodik a gép a negatív számokról

A számítógépek nem „tudják”, mi az, hogy negatív szám.
A gép szemében minden csak 0 és 1, vagyis bináris logika.
A kérdés tehát az: hogyan lehet egy ilyen rendszerben azt kifejezni, hogy –5?
Erre ad zseniális megoldást a 2’s komplemens.

Az előző részben megismertük, hogyan egészítjük ki a számokat úgy, hogy minden helyiértéken elérjük a maximumot – ez volt a p−1’s komplemens elve.
Most jön a trükk, amitől a számítógép tényleg életre kel: a p’s komplemens, vagyis a 2’s komplemens a bináris világban.

Anime-stílusú illusztráció egy tanuló lányról, aki a 2’s komplemens működését tanulmányozza, a bináris logika és a bitek megfordításának szemléltetésére.

A 2’s komplemens tulajdonképpen a „felturbózott” verzió: mindössze annyit csinálunk, hogy a korábban kapott komplemenshez hozzáadunk +1-et. És ezzel elérjük, hogy a számítógép a kivonást is egyszerű összeadással végezze el – villámgyorsan és hibamentesen.

Ez az apró lépés, a +1 hozzáadása, egy teljes logikai áttörés volt: mostantól a gép nem „külön gondolkodik” a negatív számokról, hanem egyszerűen ugyanazt az áramkört használja hozzá, mint az összeadáshoz. Így a kivonás = komplemens + 1 + összeadás.

A következő példában látni fogjuk, hogyan számol a gép a 2’s komplemens segítségével, és mit jelent valójában az a kis „túlcsorduló” 1, ami látszólag eltűnik – pedig ez teszi lehetővé, hogy a bináris világban minden érték „körbeérjen”.

Anime-stílusú illusztráció, amelyen egy lány a 2’s komplemens elvét magyarázza: bináris számok és fénylő „+1” jel lebegnek körülötte, bemutatva, hogyan lesz a kivonásból összeadás.

A kettes komplemens lényege

Az előző leckében már megtanultuk, hogyan működik a p’s komplemens a 10-es számrendszerben — ott a „+1 trükk” segített abban, hogy a kivonás egyszerűen összeadássá váljon. Most ugyanezt az elvet nézzük meg binárisan, azaz a 2-es számrendszerben.

A különbség mindössze annyi, hogy:

  • a 10-es rendszerben a „p” = 10,

  • a binárisban pedig „p” = 2.

Vagyis most már a 2’s komplemensről beszélünk.

Mit jelent ez a gyakorlatban?

A bináris számrendszerben minden bitet megfordítunk: 

  • a 0-ból 1 lesz,

  • az 1-ből pedig 0.

Ez az úgynevezett 1’s komplemens. Ha ehhez hozzáadunk +1-et, akkor megkapjuk a 2's komplemenst - vagyis azt a formát, amivel a gép a negatív számokat is tudja kezelni és a kivonást is egyszerűen elvégzi.

Vegyünk egy 8 bites bináris számot, például:

0011 0001₂

Ez a szám pozitív, és decimálisan 49₁₀-et jelent.

🔹 1. lépés – Képezd az 1’s komplemenst

A bináris 1’s komplemens egyszerűen azt jelenti, hogy minden bitet megfordítunk:

  • ahol 0 volt, ott 1 lesz,

  • ahol 1 volt, ott 0 lesz.

Tehát:
Eredeti: 0011 0001
Komplemens: 1100 1110

Ez a művelet bitenkénti negálás (invertálás). 

🔹 2. lépés – Adj hozzá +1-et

A következő lépésben a gép egyet hozzáad ehhez az 1’s komplemenshez:

1100 1110
+          1
──────────
1100 1111

Ez már a 2’s komplemens, vagyis a bináris „negatív párja” az eredeti számnak.
Ha a gép ezt a formát látja, tudja, hogy a szám negatív, és a számértéket ebből fogja kiszámolni.

Miért működik ez?

A kettes komplemens tulajdonképpen azt mondja:
„Egészítsd ki a számot a következő bináris alapig, azaz 2ⁿ-ig.”

8 bit esetén ez: 2⁸ = 256

Ha az eredeti szám 49, akkor a 2’s komplemens (a „negatív párja”) 256 − 49 = 207 lesz,
vagyis a gép így reprezentálja a −49-et.

Ellenőrzés

Ha összeadod az eredeti és a kettes komplemens alakot, mindig megkapod a teljes „kört”:

 0011 0001
+ 1100 1111
──────────
1 0000 0000

Az 1 „túlcsordul”, vagyis kiesik, és a 8 bites helyen marad: 0000 0000. Ez pontosan a bináris nullát jelenti - a rendszer tehát bezárult, visszatért a nullához. 

Számoljunk akkor...

Számoljuk ki a 43₁₀  kettes komplemensét.

1. lépés: Megnézem, hogy negatív számról van-e szó. Nem negatív, tehát átkonvertálom bináris számrendszerbe és úgy hagyom, mert a pozitív szám kettes komplemense önmaga. 

Eredmény: 43₁₀ = 00101011₂

Számoljuk ki a −123₁₀ kettes komplemensét.

1. lépés: Ez most negatív szám, tehát végig kell csinálnunk a 2’s komplemens lépéseit. Ehhez 8 bitet használunk (mert ez a leggyakoribb fix hossz).
2. lépés: Elhagyjuk az előjelet és átkonvertáljuk a szám abszolút értékét binárisra: 123₁₀ = 01111011₂
3. lépés: Minden bitet megfordítunk (1’s komplemens): 01111011 → 10000100
4. lépés: Hozzáadunk +1-et (2’s komplemens): 10000100 + 1 = 10000101

Eredmény: −123₁₀ = 10000101₂

A 2’s komplemens eljárás azért zseniális, mert így a gép nem külön kezeli a negatív számokat.
Az 10000101₂ értéke a gép számára automatikusan −123 lesz, mert az első bit (a legbaloldalibb) 1, tehát ez egy negatív szám — a rendszer pedig a 2’s komplemens szabály szerint dekódolja.

 

Anime-lány holografikus kijelzőn magyarázza a kettes komplemens számítást, ahol a bináris számok megfordulnak és +1-et kapnak.

Feladatok

1. feladat Számoljuk ki a 67₁₀ kettes komplemensét!

Megoldás

1. lépés: Ellenőrizzük, negatív-e a szám. Nem — tehát egyszerűen binárisra váltunk.
2. lépés: Átváltás binárisra (8 bites): 67₁₀ = 01000011₂
3. lépés: Pozitív szám, így a kettes komplemense önmaga.

👉 Eredmény: 67₁₀ = 01000011₂

2. feladat: Számoljuk ki a –58₁₀ kettes komplemensét!

Megoldás

1. lépés: Ez negatív szám, tehát végig kell csinálnunk az eljárást.
2. lépés: Átváltás abszolút értékre: 58₁₀ = 00111010₂
3. lépés: 1’s komplemens → bitek megfordítása: 11000101₂
4. lépés: +1 hozzáadása (2’s komplemens): 11000101₂ + 1₂ = 11000110₂

👉 Eredmény: –58₁₀ = 11000110₂

3. feladat: Számoljuk ki a –103₁₀ kettes komplemensét!

Megoldás

1. lépés: Negatív szám, tehát teljes eljárás kell.
2. lépés: Átváltás abszolút értékre: 103₁₀ = 01100111₂
3. lépés: 1’s komplemens → bitek megfordítása: 10011000₂
4. lépés: +1 hozzáadása: 10011000₂ + 1₂ = 10011001₂

👉 Eredmény: –103₁₀ = 10011001₂

Ha szeretnéd folytatni a tanulást, itt válogathatsz az információs technológia anyagok között