Ez hogyan lehetséges?
Gondolkodtam a számítógép számábrázolásán és azt vettem észre, hogy a 10-es számrendszerbeli 4-es és a mínusz 4-es 2-es számrendszerben ugyan úgy van ábrázolva.
4(10)=100(2)
100(2) 1-es komplemense: 011
100(2) 2-es komplemense: 011+001=100
Hogyan tudja megkülönböztetni a gép a pozitív 4-est a negatív 4-estől?
3 biten -4 és 3 között lehet ábrázolni a számokat 2-es komplementeres számábrázolásnál. Az elő bit egyben az előjelre is utal, ahol az 1 a negatív, 0 a pozitív.
A válasz a kérdésedre pedig az hogy a számítógép 32 vagy akár 64 biten is tudja ábrázolni a számokat, így elég nagy számok is beleférnek.
8 biten a 4 és a -4:
00000100
11111100
Lehet látni hogy különböznek.
A hardver nem különbözteti meg, csak a szoftver.
A hardvert nem igazán érdekli, miket hol tárolsz, ő csak végrehajtja a szoftver utasításait. A programozónak kell tudnia, hogy az adatok bizonyos helyen milyen jelentéssel bírnak.
"8 biten a 4 és a -4:
00000100
11111100
Lehet látni hogy különböznek."
8 biten a +128 és a -128:
10000000
10000000
32 biten a 2147483648 és a -2147483648:
10000000000...
10000000000...
Utóbbi válaszoló már jól mondta, attól függ az egész, hogy a program miként kezeli az adatokat, nem árt tudni, hogy mit hová rakott, és célszerű azt mindig olyan típusként kezelni. Ha egy 32 bites unsigned integer-nek szánt változót signed-ként olvas ki (kettes komplemens), az az ő dolga (ez általában nem így van nyilván, de megteheted).
8 biten 2-es komplementeren nincs olyan hogy +128 és pont. Ha valakinek azt mondod hogy 2-es komplementerben 8 biten ábrázoltad a 128-at, ki fog röhögni, mert olyan nincs.
Ne akarjunk már 8 biten nagyobb számot ábrázolni mint amekkorát tudunk és a kérdés nem is erre vonatkozott.
A kérdés az volt hogy 3 biten miért ugyan az a +4 és a -4, a válasz az pedig az mert 3 biten kettes komplementerben *NEM* lehet ábrázolni a +4-et, ezt azt hiszem nem nehéz megérteni. Ennek az egyszerű tények semmi köze ahhoz hogy ha a programozó a kettes komplementerű negatív számok típusát összekeveri akkor mi történik mert az a programozó saját hülyesége és sok nyelvben invalid lesz az érték esetleg még egy exceptionnel is megdob érte.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!