Bedeutung einer Zuweisung 1ULL



  • Hallo zusammen,

    ich habe eine kurze Frage.
    Was genau bedeutet die Zuweisung
    uint64_t variable = 1ULL;
    , und wie kann ich das anders im Code ausdrücken?

    Danke & VG


  • Mod

    Das nachgestellte ULL macht aus dem Literal 1 (welches ein int wäre) ein Literal vom Typ unsigned long long. Wozu dies hier gut sein soll, weiß ich aber auch nicht. Wenn du einfach uint64_t variable = 1 schreiben würdest, würde das gleiche passieren.



  • Ok, Danke.. Dann erklärt sich, dass bei einem sizeof der Wert von 8 Byte ausgegeben wird.

    Wenn ich diese Variable um 1 Bit verschieben will, also immer die nächste Zweierpotenz, dann schreibe ich
    uint64_t variable = 1;
    variable <<= 1;

    Ausgabe: 2, 4, 8, etc.

    Wenn ich selbiges auf einer Sun ausgebe, bekomme ich als Ausgabe nur 0.. (Ich dachte zunächst, dass könnte am Ausdruck 1ULL liegen.)

    Kann mir das jemand erläutern?


  • Mod

    Wenn das wirklich so passiert, dann hat der Sun-Compiler einen Fehler. Ist das wirklich 1:1 der Code? Hast du dein eigentlichen Fehler eventuell wegverkürzt? Das der Compiler einen solchen Fehler hat, kann ich mir einfach nicht vorstellen.



  • Wenn du so was hast:

    uint64_t variable = (1ULL <<34);
    

    brauchst du das ULL, weil die 1 sonst als int angelegt wird und das hat i.A. nur 32 Bit.

    firsttime schrieb:

    Wenn ich selbiges auf einer Sun ausgebe, bekomme ich als Ausgabe nur 0.. (Ich dachte zunächst, dass könnte am Ausdruck 1ULL liegen.)

    Hast du bei printf auch das richtigen Formatzeichen für uint64_t angegeben?

    Denn wenn die Big-Endian ist und du hast nur %lu angegeben sieht printf nur die höherwertigen Bytes.



  • Danke! Das war in der Tat ein Problem mit dem Formatzeichen. Ich habe Little Endian/Big Endian an der Stelle nicht auf dem Schirm gehabt.



  • granini, bin ich als Gast gewesen... 😉


Anmelden zum Antworten