Bit-Reihenfolge


  • Mod

    Die Antwort muss nein lauten auf einem System, bei dem char vorzeichenbehaftet ist und 8 bit hat. Dann ist nämlich die Initialisierung

    char d = x & 0xFF;
    

    undefiniert. Abgesehen davon besteht kein Problem - generell werden derartige Operation besser mit vorzeichenlosen Typen durchgeführt. Die Wertdarstellung von Standardintegertypen ist insoweit festgelegt, als sie eine Binärdarstellung ist (also z.B. kein BCD). Davon wird aber hier kein Gebrauch gemacht, denn es wird von vornherein nur mit Werten operiert.



  • Nein das gilt nicht immer, gilt zB nicht auf einem System das die Zahlen anders darstellt (wobei natürlich der großteil der pcs das so darstellt).

    Du kannst das aber unterscheiden indem du dir einen festen Wert den du kennst speicherst und kontrollierst welche Speicherdarstellung verwendet wird. Das erspart dir dann das aufwändigere Umrechnen von Dezimal auf Binärzahl per Hornerschema etc.


  • Administrator

    Also moment, wie jetzt?

    • Fencer, sagt ja.
    • camper, sagt ja, wenn gilt:
    int x; // Dieser integer
    
    unsigned char a = (x >> 24) & 0xFF;
    unsigned char b = (x >> 16) & 0xFF;
    unsigned char c = (x >> 8) & 0xFF;
    unsigned char d = x & 0xFF;
    
    • DaRpH, sagt nein.

    Wie wäre es mit Quellen? 🙂

    Grüssli


  • Mod

    Dravere schrieb:

    Wie wäre es mit Quellen? 🙂

    ist mir zu trivial für die Mühe 😉


  • Administrator

    camper schrieb:

    Dravere schrieb:

    Wie wäre es mit Quellen? 🙂

    ist mir zu trivial für die Mühe 😉

    Ist es zu unfair anderen gegenüber, wenn ich dir jetzt glaube, da ich immer das Gefühl hatte, dass du weisst, wovon du sprichst?
    Naja, oder wir könnten es so regeln, dass du mir sonst Schadensersatz gibst. Wenn du wirklich weisst, dass es stimmt, dann kannst du es ja garantieren, ohne eine Quelle zu nennen :p

    Grüssli



  • int nZahl = 31231; // ...
    int nSample = 0x03020100; // Um Speicherreihenfolge zu ermitteln
    
    char* pcBytes = reinterpret_cast<char*>(&nZahl);
    char* pcReihenfolge = reinterpret_cast<char*>(&nSample);
    
    char a = pcBytes[pcReihenfolge[0]];
    char b = pcBytes[pcReihenfolge[1]];
    char c = pcBytes[pcReihenfolge[2]];
    char d = pcBytes[pcReihenfolge[3]];
    

    Damit ist meiner Meinung nach die Reihenfolge auf allen Byteorientierten Systemen garantiert.


  • Mod

    Dravere schrieb:

    Wenn du wirklich weisst, dass es stimmt, dann kannst du es ja garantieren, ohne eine Quelle zu nennen

    Warum sollte ich das tun? Ein "Beweis durch Autorität" ist empirisch nutzlos und ich habe kein Interesse daran, Recht zu behalten, falls ich falsch liegen sollte.
    Ich bin gar nicht sicher ob DaRpH hier wirklich widersprochen hat, kann auch sein, dass er sich (nur) auf den zweiten Fall per Cast bezog.



  • Ja ist schon richtig ich hab mich nur auf den Cast bezogen.

    Die Sache mit Bit-Shift hab ich ausgeschlossen da bei 64bit Werten je nach Compiler Mist gebaut wird. Wobei das bei 32 Bit ja durchaus funktioniert.


  • Administrator

    camper schrieb:

    Warum sollte ich das tun? Ein "Beweis durch Autorität" ist empirisch nutzlos und ich habe kein Interesse daran, Recht zu behalten, falls ich falsch liegen sollte.

    War ja auch nur ein dummer Witz 😉

    camper schrieb:

    Ich bin gar nicht sicher ob DaRpH hier wirklich widersprochen hat, kann auch sein, dass er sich (nur) auf den zweiten Fall per Cast bezog.

    DaRpH schrieb:

    Ja ist schon richtig ich hab mich nur auf den Cast bezogen.

    Achso. Das mit dem Cast ist mir schon klar. Es ging mir nur um die Bitdarstellung, ob halt eben die funktioniert, da es ja bei der Bytedarstellung nicht funktioniert.

    DaRpH schrieb:

    Die Sache mit Bit-Shift hab ich ausgeschlossen da bei 64bit Werten je nach Compiler Mist gebaut wird. Wobei das bei 32 Bit ja durchaus funktioniert.

    Darf ich noch nochfragen, was das genau bedeutet?

    Grüssli



  • auf nem Motorola CPU ist umgekehrt^^

    Stichwort Byteorder



  • BorisDieKlinge schrieb:

    auf nem Motorola CPU ist umgekehrt^^

    Stichwort Byteorder

    Guten Morgen, das stand schon in der ersten Antwort.

    Hier ging es auch vor allem um Bit-Order.


Anmelden zum Antworten