Bit Order
-
Moin,
mal eine etwas Hardware-nähere Frage. Kontext ist, dass ich bestimmte Bits aus einem Byte(unsigned char) auslesen will. Meinetwegen will ich wissen, ob die Bits 7, 3, 1 und 0 gesetzt sind:
#define IS_BIT_SET(byte,bit_index) ((byte & ( 1 << bit_index)) != 0) unsigned char x = 'H'; // 01001000, Reihenfolge: 7 bis 0 IS_BIT_SET(x, 7); // false IS_BIT_SET(x, 3); // true IS_BIT_SET(x, 1); // false IS_BIT_SET(x, 0); // falseFrage: Ist das auf allen Computern gleich? Dass das bei der Byte Order nicht so ist, ist klar. Aber wie siehts mit der Reihenfolge der Bits aus? Könnte ich das Programm kompilieren und dann (ohne Neukompilierung) auf verschiedenen Rechnern mit gleichem Resultat ausführen?
MfG. Chris
-
Die bit-Operatoren (<<, >>, &, |, ^ - hab ich welche vergessen?) funktionieren (zumindest für unsigned) auf allen Architekturen so, wie Du es erwartest. Das ist unabhängig davon, in welcher Reihenfolge die Bits auf der Platine angeordnet sind.
-
CHAR_BIT ist mindestens acht, also sollte dein Code definiert sein.
Es ist allerdings nicht garantiert, dass 'H' gleich 01001000(2)@SG1: Du hast "~" vergessen.
-
Zielt deine Frage auf Endianess ab?