Honnan tudom eldönteni, hogy a kettes számrendszerben a számom pozitív vagy negatív?
A tankönyvben most tanulom a kettes komplemens kódot 8 bites tárolás esetén. A tankönyv azt írja: "a negatív szám kódjában a legnagyobb helyiértékű bit 1 értéke jelzi a negatív előjelet".
Akkor honnan döntöm el, hogy a 11111111 a 255-öt jelöli, vagy egy negatív számot?
Innen:
"8 bites tárolás esetén"
A legnagyobb helyiértéken álló bit az előjel.
A példa tehát negatív szám.
Ahogy #2 írja, ezt ránézésre sehogy. Egy programnak, ami mondjuk kiolvassa ezt az értéket, tudnia kell, milyen számábrázolással lett oda letárolva az adott érték, vagy milyen módon akarja kiolvasni.
"A tankönyv azt írja..." Gondold a mondat elé, hogy előjeles számábrázolás esetén. (Ezen belül többféle van, általában a 2-es komplemenst használják.)
#dubitus, létezik olyan pl. C-ben, hogy signed és unsigned char.
A számábrázolás módja azt mondja meg, hogy egy értéket milyen módon tudunk felírni mondjuk egyesekkel és nullákkal. Miután felírtuk, már nekünk kell tudni, hogy az milyen módon ábrázolja az eredeti értéket. Ha mondjuk bekerül a memóriába, akkor ott már csak bitek vannak, nincs se előjel, se speckó jelzőbit.
Pl: 1111 1111
Ezek csak egyesek, a konkrét érték attól függ, milyen módon ábrázolja azt az értéket. Ha előjel nélküli egész, akkor 255, de ha kettes komplemens, akkor -1. Azt viszont a program fogja tudni, hogy azt a nyolc bitet hogyan kell kezelnie. Sok nyelvben emiatt vannak különböző változó típusok, amik megmondják a programnak (pontosabban a fordítónak, ami a megfelelő kódot előállítja), hogy miként kezelje.
Kezdjük az elején akkor!
Teljesen mindegy milyen programozási nyelvet használsz, vagy milyen processzort, nem ez a lényeg.
Mivel a memóriában csak biteket tudsz tárolni, de előjelet nem, ezért ha előjeles számot akarsz tárolni, akkor az egyik bitet arra kell használnod, hogy a szám előjelét mutassa.
Ha természetes számot (nem negatív egészt) akarsz ábrázolni (például egyesével növelsz egy értéket, mert így számlálsz meg valamit), akkor nincs szükséged az előjelre, az összes bitet használhatod a szám ábrázolására. Ha viszont két szám különbségét akarod tárolni, akkor bizony célszerű az egyik bitet az előjel jelzésére felhasználni, mert az eredmény lehet negatív is. Persze az is előfordulhat, hogy csak negatív szám lehet egy művelet eredménye, ebben az esetben szintén elhagyható az előjel ábrázolása, elég csak a szám abszolút értékét tárolni, nem fog plusz információt jelenteni az előjel, így az el is hagyható.
A kettes számrendszer természetes számokat ír le. A tízesben is az előjel egy speciális jel (nem számjegy, hanem megy vízszintes vonal!).
Ehhez képest a számítógépben a számokat többféleképpen lehet lejegyezni. Mindegyik esetben egy előre eldöntött szabály van. A te esetedben ez azt jelenti, hogy az általad mondott szám valóban 255. Azonban, ha negatív számokat is kívánunk ábrázolni, kikötjük, hogy a legnagyobb helyiértékű bit előjelbit. Ebben az esetben viszont egy byte (bájt) nyolc bitjéből, ha az első 1, akkor egy negatív számról van szó, ha 0, akkor pozitívról. Értelemszerűen ekkor egy bájtban csak 127-ig tudsz számot ábrázolni, tehát ekkor ott nem 255, hanem -127 áll. De erről előre megállapodunk, és akkor mindig így van.
Köszönöm a válaszokat, sokat segített! 🙂
Zöld kéz is ment.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!