Wird dies:Bitshifting auf Little-Endian und Big-Endian
((0x10203040 >> 24) & 0xFF) == 0x10
immer TRUE auf beiden Little-Endian und Big-Endian-Maschinen?
Wird dies:Bitshifting auf Little-Endian und Big-Endian
((0x10203040 >> 24) & 0xFF) == 0x10
immer TRUE auf beiden Little-Endian und Big-Endian-Maschinen?
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:
der Wert von 0x0A0B0C0D
immer noch das gleiche ist.
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.
Bitweise Operationen sind mathematische Operationen? Ich glaube nicht ... – 0x10203040
@ 0x10203040 Warum denkst du, dass Boolesche Algebra und Operationen wie Bitverschiebung (welche Äquivalente, die tatsächlich mit 2 multiplizieren/dividieren) nicht mathematisch sind? –
Sie haben Recht. Es tut mir Leid. – 0x10203040
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