C data types, tar knäcken på mig
Re: C data types, tar knäcken på mig
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...
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...
Re: C data types, tar knäcken på mig
Nu har du väl blandat ihop det.
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.
Det är ju snarare tvärtom, Big Endian kräver en hel del manupilation för att fungera.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.
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.
Re: C data types, tar knäcken på mig
Nej, d7 hamnar på d7 och d31 på d31 vid Little Endian.gkar skrev: Skriver du ett 32 bitars ord på en 32 bitars buss i little endian kommer d7 at hamna på d31 på bussen...
Re: C data types, tar knäcken på mig
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
(eller var det Six Simple Synthesizers?
)
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

(eller var det Six Simple Synthesizers?

Re: C data types, tar knäcken på mig
Får hoppas att det var en bi-endian... 
Det dubblerar ju urvalet...

Det dubblerar ju urvalet...
Re: C data types, tar knäcken på mig
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å.
Saker kan bli ätt roliga då.
Re: C data types, tar knäcken på mig
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!
Re: C data types, tar knäcken på mig
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.
det är bara en halvsanning, det medför en prestandaförlust på de arkitekturer som kan hantera det, på andra kan det vara slutlekt.
Re: C data types, tar knäcken på mig
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å.)
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å.)