Op zaterdag 17 november 2001 22:48 schreef mbravenboer het volgende:
Stel dat we dus zeggen dat het getal 32766 wordt genoteerd als 0x00007ffe
nee, we zeggen niet even dat dat zo genoteerd wordt, het is gewoon een feit dat het zo genoteerd wordt! Net als in het decimale stelsel (we schrijven 32677 toch ook niet als 77623)
Oftewel, minst belangrijke cijfer aan de rechterkant.
(dus least significant bit last = Big Endian)
je moet bij big en little endian niet aan bits denken, maar meer aan het kleinst mogelijke element wat kan worden opgeslagen. In dit geval dus de byte. Je kunt bits niet afzonderlijk adresseren, maar bytes wel. En dan zit je dus met een dilemma: ga ik eerst de least significant byte opslaan (little endian), of eerst de most significant byte (big endian)
Dan wordt dit bij little endian dus de andere kant op geschreven.... Maar uiteraard niet in groepjes zoals ik nu zelf zie

(Sorry dat ik zo'n newbie ben

).
Dus niet de andere kant op, maar het getal wordt eerst opgesplitst in bytes:
code:
1
| 0x00007ffe => 0x00 0x00 0x7f 0xfe |
bij little endian schrijf je die groepjes dus in de verkeerde volgorde weg (wat zo z'n voordelen heeft, maar dat even terzijde), en big endian is in de volgorde zoals ik het hierboven heb neergezet
Maar hoe zit het dan met die shift? Maakt het uit of die logical of arithmetic is als je little en big endian vergelijkt?
Zoals al eerder gezegd, bij shifts maakt het niet uit hoe een getal opgeslagen is in het geheugen.
Stel, je zit even in het decimale stelsel zoals wij dat kennen, en je hebt het getal 500. Een shift is in principe een verplaatsing van de komma, dus een shift naar links maakt het getal 5000 en een shift naar rechts maakt het 50. Hoe je ze in het geheugen opslaat maakt echt helemaal niets uit, want we hebben nou eenmaal gedefinieerd dat het minst belangrijke cijfer het meest rechts staat.
De logical shift en arithmetic shift zijn ook alleen verschillend bij de shift naar rechts. De logical shift naar rechts vult de lege plaats die aan de linkerkant ontstaat op met een 0, terwijl bij de arithmetic shift de linker bit hetzelfde blijft (dwz, als er een 0 stond staat er nog steeds een 0, en als er een 1 stond een 1).
De arithmetic shift is in het leven geroepen voor negatieve getallen. Stel je hebt 4 bits: 1110. Dit getal stelt -2 voor. Als je eentje naar rechts wil shiften wil je natuurlijk 1111, -1 dus, overhouden. Maar als je met de logical shift naar rechts shift, dan komt er 0111 uit, wat het getal 7 voorstelt. Dus een arithmetic shift zorgt ervoor dat het teken wordt behouden