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.

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”.

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.

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₂



