Porządkowanie grubokońcówkowe i cienkokońcówkowe

Odpowiedz Nowy wątek
2016-06-27 17:52
0

Cześć,
staram się rozwiązać poniższe zadanie, jednak po przeczytaniu artykułów na Wiki na temat big endian i little endian nie jestem w stanie tego zrobić.
Czy mógłby ktoś z Was mi wytłumaczyć jak to działa? Nie chodzi mi o odpowiedzi, ponieważ odpowiedzi mam - chcę się jednak nauczyć jak to robić.
Dziękuję

110f99e2d6.png

Pozostało 580 znaków

2016-06-27 18:07
kq
5

grubokońcówkowe i cienkokońcówkowe
omujborze, jak ja współczuję ludziom, którzy tego muszą się po naszemu uczyć.

Ok, jak ja to sobie zapamiętuję:
Big Endian - po ludzku
Little Endian - od du​py strony

Jest to po prostu kolejność zapisu cyfr w zapisie pozycyjnym. Dla przykładu, 123 jako liczbę czterocyfrową w Little Endian zapiszesz 3210, a w Big Endian 0123. Oba oznaczają to samo (0 103 + 1 102 + 2 101 + 1 100)

Musisz wziąć pod uwagę, że w tym kontekście "cyfrą" dla procesora jest 1 bajt¹, tak więc mając liczbę 12 34 56 7816 w Little Endian zapiszesz 78 56 34 12, a w Big Endian 12 34 56 78.

Tak przy okazji: przed C99 (oraz w C++) takie użycie unii to UB.

¹ mówimy o popularnych architekturach


Pokaż pozostałe 3 komentarze
Czemu takie użycie unii to UB? - fajnygosc 2016-06-27 20:03
@fajnygosc http://stackoverflow.com/questions/25664848/unions-and-type-punning post Jamesa Kanze np. Wg powyższych :castownie uniami "raczej działa ale to śliski temat" i kto choć raz tego nie zrobił niech rzuci kamieniem. Co nie znaczy, że jest to dobra praktyka ;) - alagner 2016-06-27 20:07
UB bo nie jest zdefiniowane przed C99 - kq 2016-06-27 20:20
bo standard jest durny i nie daje żadnej możliwości „type punningu”. w praktyce to działa. - Azarien 2016-06-27 21:25
tak jest, to miała być tylko ciekawostka. - kq 2016-06-27 21:25

Pozostało 580 znaków

2016-06-27 19:36
0

tak więc mając liczbę 12 34 56 7816 w Little Endian zapiszesz 78 56 34 12, a w Big Endian 12 34 56 78.

Chodzi o ciąg bajtów w pamięci, bo liczba dziesiętna 12345678 daje szesnastkowo:
0x00BC614E
Po odwróceniu
0x4E61BC00
I zamianie na dziesiętną daje 1 315 027 968, czytli zupełnie co innego niż 78 56 34 12.

Pozdrawiam

Pozostało 580 znaków

2016-06-27 19:37
kq
0

16 oznacza podstawę. Pozdrawiam.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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