Keresés

Keresendő kifejezés:

Toplista

Toplista
  • betöltés...

Segítség!

Ahhoz, hogy mások kérdéseit és válaszait megtekinthesd, nem kell beregisztrálnod, azonban saját kérdés kiírásához ez szükséges!

Bináris számok (2-es komplemens (negálás) és különbség)

50
Nem értem, hogy kell érteni ezt a túlcsordulást, hogy mikor kell 1 meg 0. A különbséget meg végképp. Valaki segítsen!!!!!!
Jelenleg 1 felhasználó nézi ezt a kérdést.
0
Középiskola / Informatika

Válaszok

1
Az egyik lényeges dolog az, hogy megadott számú bit (számjegy) van.
Tehát mondjuk egy 8 bites számítógépben minden szám pontosan 8 bites.
A nulla ilyen: 0000 0000
(azért tettem középre egy szóközt, hogy könnyebb legyen összeszámolni, hogy ez 8 darab 0)
Mondjuk a 13 meg ez: 0000 1101 (8+4+1)
És mondjuk a 250 pedig: 1111 1010
Ezek előjel nélküli számok voltak, amiket 0-tól 255-ig lehet 8 biten ábrázolni.

A továbbiakban az egyszerűség kedvéért nézzünk inkább 4 bites számokat, bár ilyen számítógép nem volt soha.
Ha nincs előjel, akkor 0-tól 15-ig lehet 4 biten a számokat ábrázolni:
0000₂ = 0₁₀
0001₂ = 1₁₀
0010₂ = 2₁₀
...
1110₂ = 14₁₀
1111₂ = 15₁₀

Adjuk mondjuk össze a 3-at meg a 14-et:
0011
1110
------
Hátulról kell kezdeni, ugyanúgy, mint ahogy 10-es számrendszerben is összead az ember: Utolsó számjegyek összege: 1+0=1, leírom az 1-et
Aztán utolsó előtti: 1+1=2₁₀=10₂, vagyis leírom a 0-át az előzőleg leírt ELÉ és megjegyzem az 1-et az ujjamon
Aztán 0+1-hez azt a megjegyzett 1-et is hozzá kell adni, ami 2₁₀ = 10₂. Leírom a 0-át, megjegyzem az 1-et.
Az utolsó két számjegy 0+1, meg a megjegyzett 1 = 2₁₀ = 10₂. Leírom a nullát, megjegyzem, az 1-et
A vége az lett, hogy 0001 lett leírva és még megjegyeztem az 1-et az ujjamon. Papíron azt az utolsó megjegyzett 1-et is leírná az ember az eddigiek elé: 10001, de az már 5 számjegy lenne!!! Viszont csak 4-nek van hely, ezért az az utolsó elvész!!! Az a túlcsordulás.

Az jött ki, hogy 3₁₀+14₁₀ = 0011₂+1110₂ ≈ 0001₂ vagyis 1₁₀, és túlcsordulás történt.
Persze az összeg nem annyi, de egyszerűen nincs több hely. 4 bites számítógéppel nem lehet ilyen "nagy" számokat összeadni.

----
A következő a kivonás lesz.
Ahhoz először a 2-es komplemens számábrázolást kell megérteni, meg azt, hogy hogyan lehet negatív számot ábrázolni. A számítógépben nem lehet olyat csinálni, hogy tegyünk a szám elé egy mínusz jelet, mert nincs mínusz jel, csak 0 meg 1. Meg persze korlátozott a bitek száma is. Megint számoljunk mondjuk 4 bittel.

Azt találták ki, hogy a legfelső bit jelezze azt, hogy pozitív vagy negatív számról van-e szó. Ha 0, akkor pozitív, ha 1 , akkor negatív.
De ennél trükkösebb a dolog: bár 0001₂ az 1, de nem 1001₂ a mínusz 1, hanem 1111₂ !!
Ez azért van így, hogy ha összeadjuk a -1-et meg a +1-et, akkor 0 jöjjön ki:
1111 (-1)
0001 (+1)
------
0000
és van még egy túlcsordulás is, de az nem számít, hisz elveszett...
(ugye végigcsináltad az összeadást, és tényleg 0 jött ki túlcsordulással?)

Hogyan lehet ilyen negatív számokat csinálni?
Két lépés kell hozzá: mondjuk mi lesz a -5, vagyis a 0101₂-nek a negatívja:
1) minden bitet az ellenkezőjére kell fordítani:
0101 → 1010
2) Hozzá kell adni 1-et:
1010
0001
-----
1011
Kész, ez a -5: 1011₂

Ellenőrzés: (-5)+(+5) nulla kell legyen:
1011
0101
-----
0000
és persze lett egy túlcsordulás is, de az nem számít, mert elvész.

-------------------

Szóval hogyan kell kivonni? Úgy, hogy a kivonandónak kell venni a negáltját (az előbb leírt két lépéssel), aztán összeadni.

Pl. 6 - 4:

6: 0110₂
4: 0100₂
-4 előállítása:
1) bitenkénti ellenkezőre váltás: 1011
2) hozzáadunk 1-et: 1100

Tehát 6-4 úgy megy, hogy összeadjuk a 0110-t meg az 1100-t:
0110
1100
------
0010
ami 2, tényleg jó. (Ugye neked is kijött? Volt túlcsordulás is.)

----------------------------------

Még annyit érdemes tudni, hogy mondjuk 4 biten előjel nélküli számokat 0-tól 15-ig lehet ábrázolni. "Előjel nélküli szám" azt jelenti, hogy a legfelső bit nem speciális, nem azt mutatja, hogy negatív számról van szó, hanem egyszerűen 8-at ér (4 biten).
Viszont ha előjeles számokat akarunk ábrázolni ugyanazon a 4 biten, akkor már csak -8 és +7 közötti számokat lehet ábrázolni:
-8: 1000
-7: 1001
-6: 1010
-5: 1011
-4: 1100
-3: 1101
-2: 1110
-1: 1111
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
több lehetőség nincs.
0