Azok a számítógépek amik a biteket balra tömörítik a memóriában, a bitek növekvő sorszámozását balról kezdik (legalacsonyabb bit a baloldalon), vagy marad a jobbról növekvő (legalacsonyabb bit a jobboldalon)?
Én mondjuk nem nagyon értem a kérdést, de azért válaszolok hátha sikerül kibogozni.
Mit jelent az hogy a "a biteket balra tömörítik"?
Jelenlegi ismereteim szerint a bitek mindig jobbról balra vannak számozva azok helyiértékének megfelelően. Nem tudok róla hogy ez alól van kivétel valamelyik számítógépben.
Nem lehet hogy a byte sorrenddel kevered a bit sorrendet?
(Big endian, little endian)
Mert a byte sorrend processzor függő, van ilyen is, meg olyan is. De a bitek sorrendje (a byte-on belül) itt is azonos.
Amit kérdezel, valójában nincs, hiszen a bitek sorrendjét a sorszámozásuk írja elő. Az, hogy ÍRÁSBAN te milyen sorrendben írod le azokat, az már rád tartozik, és azokra, akik a te írásodat olvassák. Ha egy byte tartalmát te a 27601354 bitsorrendben írod le, és a decimális 204 úgy néz ki, hogy 11100100, attól a byte tartalma továbbra is az a szám lesz, amit kettes számrendszerben így írunk: 11001100. Azt sem tiltaná semmi, hogy te a byte tartalmát 3-as számrendszerben írd le, mert a memóriában akkor is csak binárisan van tárolva. Nem érdekes, hogy szerintünk a bitek milyen sorrendben vannak, mert a biteket a sorszámuk minden helyzetben azonosítja.
Az, hogy balra "tömörítik", balra igazítást jelent, gondolom. Lehet, hogy az adott programnyelv vagy monitorprogram úgy kéri a bevitelt, hogy a legalacsonyabb bit van bal oldalon, de az itt is csak egy kommunikációs kérdés, a hardverhez nincs köze.
Röviden: A bájtsorrend lehet változó (LE, BE), a bitsorrend mindig ugyanaz, "bal" oldalt az MSB.
(Nyilván a memóriában nincs értelme bitsorrendről beszélni, ha egyszer bájtonként címezhető, legalábbis szoftveresen nincs)
A címbusz byte-onként hivatkozik a memóriára, de az egyes bitek gyakran hordoznak külön-külön információt, ilyenkor ezek elérése egyenként is szükséges. A programnyelvekben lehetnek erre külön utasítások, de végeredményben vagy maszkolással, vagy léptetéssel történik a dolog. Ezekhez viszont fontos tudni azt, hogy az adott nyelv a bitsorrendet hogyen állapítja meg.
De ez nyelvfüggő probléma, még ha az a nyelv a gépi kód is, hardverszinten nem értelmezhető, nincs jelentősége.
A C nyelv alapjait tanulom Stephen G. Kochan Programfejlesztés C nyelven című könyvéből, az alábbi feladat kavart meg:
Írjuk meg a bitpat_get függvényt, amely az első paramé-terként megadott (előjel nélküli egész) számból kiolvas egy bitmintát! Három paramétere legyen a függvénynek: az első legyen egy unsigned int, a második legyen egy egész szám, amely a kívánt bitminta kezdőbitjét tartalmazza, a harmadik pedig adja meg a kiemelendő bitek számát. A baloldali bit sorszáma legyen a nulladik. Olvassuk ki az első paraméter kívánt bitjeit! Például a
bitpat_get(x,0,3)
utasításnál olvassuk ki az x három baloldali bitjét, valamint a
bitpat_get(x,3,5)
hívásával olvassuk ki az x szám (balról) negyedik bitjétől kezdve öt bitet.
Gondolom nem lövök le nagy poént, talán ez segít:
int bitpat_get(unsigned data, int index, int count) {
int bits = sizeof(int)*8; // masszív egyszerűsítés
int shift = bits-start-count;
int mask = UINT_MAX >> (bits-count);
return (data >> shift) & mask;
}
Ezek a műveletek (mint úgy általában mind, amit írsz) a processzorban hajtódnak végre, így itt nem kell törődnöd a BÁJTsorrenddel.
"Kicsit bővebben."
Már hogy te, vagy én?
"Ezt használtam sizeof helyett."
Ezek szerint sikerült megírni?
Mert ha csak ennyi volt vele a problémád, hogy bájtonként meg kell-e fordítani a biteket, vagy nem (nem), akkor kész is vagy.
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!