[Endian] OR, AND, XOR ... abhängig?
-
Servus,
sind die Befehle
Bitweises UND, OR, XOR abhängig von dem Endian der Plattform?unsigned int a,b, result; a = 0xff23; b = 0x3b37; result = a | b;Kann Result schwanken?
-
Bitweises UND, ODER, X-ODER arbeiten einfach nur bitweise. Dabei spielt es keine Rolle, in welchem Byte ein Bit abgelegt worden ist.
Siassei schrieb:
unsigned int a,b, result; a = 0xff23; b = 0x3b37; result = a | b;Kann Result schwanken?
Nein, nicht in diesem Fall, da
- unsigned int mindestens 16 Bit groß ist,
- und die Zuordnung zwischen Wert und Bitmuster bei vorzeichenlosen Ganzzahlen festgelegt ist.Etwas vorsichtiger muss man bei vorzeichenbehafteten Ganzzahlen sein, da die Zuordnung zwischen Wert <-> Bitmuster nicht festgelegt ist. In der Regel wird einfach das Zweierkomplement dafür benutzt. Einige exotische Maschinen verwenden aber auch das Einerkomplement oder Sign+Magnitude, was vom C und C++ Standard erlaubt wird. Garantiert wird aber dasselbe Bitmuster für nichtnegative Zahlen benutzt wie das Bitmuster bei der vorzeichenlosen Variante. Die Details sind "implementierungsabhängig", was bedeutet, dass man das in der Dokumentation des Compilers nachlesen kann. Der GCC zum Beispiel unterstützt nur das Zweierkomplement. Das trifft wohl auch auf den Microsoftcompiler zu (habe ich jetzt mal geraten).
Aber, wie gesagt, das Speicherlayout ist hier uninteressant. Das spielt erst eine Rolle, wenn Du die einzelnen Bytes einer int-Variablen selbst "anfasst" -- zB per
reinterpret_cast<unsigned char*>(&a).Gruß,
SP
-
Hallo Sebastian,
danke für deine Antwort. Sie bestätigt meine Annahmen und erfreut mich. Denn Sachverhalt mit den vorzeichenbehafteten Zahlen kannte ich nicht.

Gruß,
Thomas