Wie sind die Bits in quint32 und quint64 angeordnet



  • Hallo,

    ich habe eine crc32 klasse für qt gebastelt, die auch wunderbar funktioniert, wenn ich als datentyp quint32 benutze. jetzt wollte ich auf quint64 umstellen, damit ich die möglichkeit habe auch crc64 mit dieser klasse zu berechnen, aber nun funktioniert bereits das erstelln der crc32-tabelle nicht mehr.
    ich vermute, dies liegt daran, das sich der 32bit nicht in der unteren hälfte sondern der oberen hälfte der 64bit zahl befindet.
    kann ich darüber aussagen machen, und einfach 32bit rechtsshift machen, oder ist das von maschine zu maschine verschieden (little/big endian?)

    bleiben mir solche probleme erspart, wenn ichs in assembler mache? wobei ich dann wohl wider nicht auf allen maschienen die linux können zurechtkomme wegen powerpc und so.

    ich bin dankbar für jeden tipp, kann auch code posten wenn gewünscht 🙂



  • ich konnte den fehler schon eingrenzen.

    [code]
    #define BITMASK(X) (1L << (X))

    quint32 topbit32 = BITMASK(31);
    quint64 topbit64 = BITMASK(31);

    beide sollten doch eigtl. den gleichen wert haben, und zwar 2hoch31, aber irgendwie ist das nicht der Fall. 😞
    die 32bit zahl enthält wie erwartet den wert 2147483648, aber im 64 bit teil ist 18446744071562067968 gespeichert, wie kann das sein?
    binär betrachtet sind also beide die selbe 64bit zahl (bit 31 bis 63 jeweils einschließlich gesetzt, der rest 0), bei topbit32 wird nur die unteren 32 bit betrachtet, also richtiges ergebniss, bei topbit64 aber nicht. wo kommen die ganzen 1 er her, wenn ich doch nur eien 1 nach links shifte?



  • OK, habs herausgefunden, ich muss die 1 als 1LL defnieren, dachte eigtl. die führenden bits sind eh null, dem ist aber wohl nicht so.


Anmelden zum Antworten