2015-05-14 3 views
5

Wird dies:Bitshifting auf Little-Endian und Big-Endian

((0x10203040 >> 24) & 0xFF) == 0x10 

immer TRUE auf beiden Little-Endian und Big-Endian-Maschinen?

+2

Eine Sache, die viele Leute verwirrt, ist die Tatsache, dass Endian-Ness nur mit * externem Speicher * verwandt ist. Innerhalb des Prozessorregisters gibt es keine "Endian-Ness". Die Nummer wird aus dem Speicher nach den Endian-Konventionen gelesen, aber innerhalb des Registers ist es dieselbe Nummer, unabhängig von der anfänglichen Endian-Eigenschaft. Wenn Sie also richtiges Bit-Shifting durchführen, werden Sie einfach die am wenigsten signifikanten Bits los, und es gibt keine Mehrdeutigkeit. – vsoftco

Antwort

8

Ja. Die Endianz beeinflusst nur, wie Bytes im Speicher gespeichert werden. Der Wert 0x10203040 ist immer 270544960, unabhängig davon, ob es sich um das erste oder letzte Byte im Speicher handelt, das 0x10 ist.

grundlos Um Bilder aus dem Wikipedia-Artikel über Endianness leihen, und zwar unabhängig davon, welche dieses Layout unseres System verwendet:

enter image description hereenter image description here

der Wert von 0x0A0B0C0D immer noch das gleiche ist.

2

wird dies:

((0x10203040 >> 24) & 0xFF) == 0x10 

immer TRUE auf beiden Little-Endian und Big-Endian-Maschinen?

Ja, es wird das gleiche Ergebnis auf beiden Architekturen liefern. Es ist tatsächlich eine mathematische Operation, und MSB LSB-Befehle werden unter der Haube des Mikrocodes dieser bestimmten CPU gehandhabt.

+0

Bitweise Operationen sind mathematische Operationen? Ich glaube nicht ... – 0x10203040

+2

@ 0x10203040 Warum denkst du, dass Boolesche Algebra und Operationen wie Bitverschiebung (welche Äquivalente, die tatsächlich mit 2 multiplizieren/dividieren) nicht mathematisch sind? –

+0

Sie haben Recht. Es tut mir Leid. – 0x10203040