Kezdőoldal » Számítástechnika » Programozás » C/C++: Válaszolnátok erre a...

C/C++: Válaszolnátok erre a kisebb "jól értem-e" kérdésözönre? Adatok tárolása, bináris ábrázolás

Figyelt kérdés

Tehát, az alábbiakban sorszámozva összeállítom hogy mik a kérdőjeles részek és az érdekelne hogy jól értem-e vagy nem.


1. Legyen


signed int a;


változó. A futó alkalmazáshoz kapcsolt adatterületen létezik ez a változó 2 bájton, címe &a. Az


a = KONSTANS; // KONSTANS nyilván decimális érték


értékadás hatására az alkalmazás (vagy oprendszer?) a KONSTANS-t átalakítja kettes számrendszerbeli számmá, kettes komplemenst képez és a &a területen ez az érték tárolódik el. Ezért, előjeles értékeket is eltárolhatunk. Ha lekérdezzük az "a" változó értékét, akkor az &a területről kettes komplemensképzéssel kapom meg a KONSTANS értéket.


2. Legyen most


unsigned int a;


változó. A fentiek abban módosulnak hogy a bináris tárolás komplemensképzés nélkül megy végbe hiszen a változó csak pozitív értékek tárolására van, így fölösleges a negáció.


3. A fentiek szépek de a C/C++ nyelv nem ilyen egzakt módon kezeli az adatokat. Mi a helyzet alacsonyabb "nyelvekkel" pl Assembly, gépi kód, ott így történik az adatábrázolás?



Nagyon hálás lennék ha válaszolnátok erre a pár kérdésemre. Üdv


2013. jan. 31. 19:01
1 2
 11/14 A kérdező kommentje:
Köszönöm :) Bocsi ha nem túl jól fogalmaztam. Üdv
2013. jan. 31. 22:11
 12/14 anonim ***** válasza:

"A futó alkalmazáshoz kapcsolt adatterületen létezik ez a változó 2 bájton, címe &a."

Általában 4 byte, régen volt jellemző a 2 byte. A méretről a sizeof operátor tudna "mesélni". Amit a szabvány előír : sizeof(short) <= sizeof(int) <= sizeof(long), nem írja elő a szabvány a pontos méretet hogy minél hatékonyabb kódot tudjon generálni a c/c++ fordító adott hardverhez.

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

"a = KONSTANS; // KONSTANS nyilván decimális érték


értékadás hatására az alkalmazás (vagy oprendszer?) a KONSTANS-t átalakítja kettes számrendszerbeli számmá, kettes komplemenst képez és a &a területen ez az érték tárolódik el. Ezért, előjeles értékeket is eltárolhatunk. Ha lekérdezzük az "a" változó értékét, akkor az &a területről kettes komplemensképzéssel kapom meg a KONSTANS értéket."

A decimális érték átalakítása kettes számrendszerbeli számmá még fordítási időbe történik.

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

"2. Legyen most


unsigned int a;


változó. A fentiek abban módosulnak hogy a bináris tárolás komplemensképzés nélkül megy végbe hiszen a változó csak pozitív értékek tárolására van, így fölösleges a negáció."

Valójába ugyanúgy történik,( a programba "be van égetve"), attól még írhatom hogy a= -1, ekkor a legnagyobb unsigned int-et kapom, vagy fordítva int helyébe beírhatom a legnagyobb undigned int értékét akkor -1-et kapok.

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

"3. A fentiek szépek de a C/C++ nyelv nem ilyen egzakt módon kezeli az adatokat."

Akkor nem értem mit állítasz.

Assembly-be pontosan meghatározott, nem fordító függő hogy hány byte-os számok vannak, nagyon hardver és OS függő a kód. Ott látszik hogy valójába nincs unsigned int és signed int hanem valójába nem előjeles vagy nem egy szám hanem attól függ hogy hogyan tekintem, összeadásra, kivonásra ugyan az a gépi kódú utasítás van attól független hogy előjeles számról van e szó hiszen ugyanaz a bitkép keletkezik, úgy van megalkotva, de a szorzásra külön van előjeles meg előjel nélküli szorzás mint gépi kódú utasítás, mert akkor különböző bitkép jellemzi a szorzás eredményét attól függően hogy előjeles vagy nem számokról van e szó.

2013. jan. 31. 22:12
Hasznos számodra ez a válasz?
 13/14 A kérdező kommentje:
Nagyon köszönöm a részletes kifejtést, üdv
2013. jan. 31. 22:16
 14/14 anonim ***** válasza:
Szívesen, remélem érted.
2013. jan. 31. 22:24
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!