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); // false
    

    Frage: 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?


Anmelden zum Antworten