C data types, tar knäcken på mig

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
gkar
Inlägg: 1583
Blev medlem: 31 oktober 2011, 15:28:29
Ort: Linköping

Re: C data types, tar knäcken på mig

Inlägg av gkar »

bit96:
Vid big endian lagras bitarna på samma sätt i register som i minnet.
Dessutom spelar det ingen roll om du ökar eller minskar mellan 8, 16, 32, 64 eller vad det nu är, det är bara att fylla på eller ta bort bytes, det blir alltid rätt.
Vid little endian måste du swappa om bytesen på olika sätt om du vill omtolka ett lagrat tal som 8, 16, 32 ... bitar.

Skriver du ett 32 bitars ord på en 32 bitars buss i little endian kommer d7 at hamna på d31 på bussen...
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46916
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: C data types, tar knäcken på mig

Inlägg av TomasL »

Nu har du väl blandat ihop det.
The little-endian system has the property that the same value can be read from memory at different lengths without using different addresses (even when alignment restrictions are imposed). For example, a 32-bit memory location with content 4A 00 00 00 can be read at the same address as either 8-bit (value = 4A), 16-bit (004A), 24-bit (00004A), or 32-bit (0000004A), all of which retain the same numeric value.
Det är ju snarare tvärtom, Big Endian kräver en hel del manupilation för att fungera.
Dock kan det bli väldigt stökigt, eftersom till exempel många delar i huvudena för kommunikationsprotokoll är big-endian, ibland till och med en blandning av Big/Little.
Användarvisningsbild
bit96
Inlägg: 2528
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: C data types, tar knäcken på mig

Inlägg av bit96 »

gkar skrev: Skriver du ett 32 bitars ord på en 32 bitars buss i little endian kommer d7 at hamna på d31 på bussen...
Nej, d7 hamnar på d7 och d31 på d31 vid Little Endian.
Användarvisningsbild
MiaM
Inlägg: 12760
Blev medlem: 6 maj 2009, 22:19:19

Re: C data types, tar knäcken på mig

Inlägg av MiaM »

Fördelen med big endian är väl att talen blir mer lättlästa när man tittar på en hexdump i debugger. Det är väl kanske enda fördelen.

Ja, man kan väl diskutera om det är en fördel eller nackdel att man direkt kan läsa/skriva med "fel" storlek och ändå få rätt värden (om man håller sig inom minsta gemensamma nämnaren mellan rätt/fel storlek). Kodar man i assembler är det väl kanske bättre att programmet kraschar på första försöket (big endian) än att man får klura mycket länge för att hitta ett storleksfel (little endian).

P.S. det var en gång 10 little endians... ... och så var det bara en endian kvar :wink:

(eller var det Six Simple Synthesizers? :) )
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: C data types, tar knäcken på mig

Inlägg av sodjan »

Får hoppas att det var en bi-endian... :-)
Det dubblerar ju urvalet...
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46916
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: C data types, tar knäcken på mig

Inlägg av TomasL »

Det är rätt roligt när man i samma ord blandar little och big endian (en inte helt ovanlig sak).
Saker kan bli ätt roliga då.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: C data types, tar knäcken på mig

Inlägg av jesse »

Ja, som musik till exempel. Det blir bara brus, förutom när det blir väldigt låg volym - då hörs det plötsligt - högt!
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: C data types, tar knäcken på mig

Inlägg av stekern »

Tänkte bara inflika eftersom jag såg det nämnas ett par gånger i den här tråden att "misaligned minnesåtkomster medför prestandaförlust",
det är bara en halvsanning, det medför en prestandaförlust på de arkitekturer som kan hantera det, på andra kan det vara slutlekt.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Re: C data types, tar knäcken på mig

Inlägg av BJ »

Så om man har 32-bitars-matrisen a[] på adress 0
och vill flytta den en byte av någon anledning,
i en 8-bitars-processor t.ex.,
så ger a = a + 1; a[0] = adress 7:4 och a[1] = adress 11:8,
men a = 1; ger a[0] = adress 4:1 och a[1] = adress 8:5?
I så fall borde det gå att räkna "+" med en vanlig variabel
och kopiera den till a om man vill flytta start-adressen en byte i taget?
(Bara för att det går. Inte för att man ska göra så.)
Skriv svar