Little- i big-endian zadanie niskopoziomowe w c

0

Zadanie i odpowiedzi są w załączniku, nie rozumiemy dlaczego tak jest.

1

a) Zapisz mi liczbę 10 binarnie.
b) Teraz zapisz mi liczbę 10 binarnie, ale dopisz początkowe zera tak, aby łącznie były pełne 32 bity.
b) Teraz zapisz mi liczbę 10 jak wyżej, ale little endian.

0

Hej,

IMHO te odpowiedzi są źle, ale do rzeczy. Zmienna to po prostu kawałek pamięci. Prezentowana unia pozwala nam się dostać do 4 bajtów pamięci na dwa sposoby: dostępem 4-bajtowym oraz dostępem 1-bajtowym do każdego z 4 bajtów osobno (zadanie nie wprost zakłada, że int ma 32 bity).

W przypadku kolejności zapisu bajtów big endian, bajty są zapisywane tak, że najbardziej znaczący bajt znajduje się pod niższym adresem.
W przypadku kolejności little endian jest odwrotnie - najbardziej znaczący bajt znajduje się pod wyższym adresem.

a[0] to adres pierwszego bajta zmiennej i (najniższy adres) a więc w przypadku big endian będzie tam 0 ponieważ najbardziej znaczący bajt to właśnie 0 (0x0000000A). W przypadku little endian będzie tam 10 .

0

a) 1010
b) 00000000000000000000000000001010
c) 00001010000000000000000000000000

No właśnie dlaczego jest odwrotnie? Po zrobieniu programu, który wyświetla od a[0] do a[3] wyświetla się 10 0 0 0, więc odpowiedzi są dobre.

0
pytanie.pytanie napisał(a):

b) 00000000000000000000000000001010
c) 00001010000000000000000000000000
00001010
00000000
00000000
00000000

00000000
00000000
00000000
00001010
Chodzi ci o to, że bajt ma 8 bitów?

0
pytanie.pytanie napisał(a):

Po zrobieniu programu, który wyświetla od a[0] do a[3] wyświetla się 10 0 0 0, więc odpowiedzi są dobre.

Ale jak rozumiem działasz na maszynie intelowej a więc little endian, więc odpowiedzi są źle co potwierdza Twój program.

0

Podana odpowiedź jest nieprawidłowa, powinno być na odwrót.
10 jest w najmłodszym bajcie reszta jest zerem, więc dla big endian (grubokońcowość) 10 jest w ostatnim bajcie (bo ten bajt jest najmłodszy).

1 użytkowników online, w tym zalogowanych: 0, gości: 1