Einfach Frage zu Double in C++



  • Hallo liebe Forengemeinde,

    ich habe eine einfach Frage bzgl. eines Doubles:

    In verschiedenen Quelltexten stoße ich immer wieder auf Dinge wie
    const double DefaultScale = 0.00403897f;
    Ich habe schon etwas gegooglet bin aber nicht fündig geworden. Wofür steht das "f" am Ende der Zahl? Für float? Was gibt es an und geht das auch bei anderen Typen?

    Hoffe ihr könnt mir helfen 👍



  • Richtig, es ist ein Suffix um zu zeigen, dass es sich um ein float-literal handelt. Ansonsten würde es als double interpretiert.

    Es gibt noch weitere solcher Suffixe. U bzw u steht für unsigned, L bzw l steht für long.
    Diese können natürlich auch kombiniert werden zu ul.



  • Mit dem f dahinter sagt man dem Compiler, dass es sich um ein float-Literal handelt. Sonst wärs ein double-literal.

    const double DefaultScale = 0.00403897f;
    

    Ist also albern, weil der float dann ja doch wieder in ein double konvertiert wird.

    Entweder

    const double DefaultScale = 0.00403897;
    

    oder

    const float DefaultScale = 0.00403897f;
    

    . 🙂

    Gruß
    Dobi



  • BootLag-BootLag- schrieb:

    const double DefaultScale = 0.00403897f;
    Ich habe schon etwas gegooglet bin aber nicht fündig geworden. Wofür steht das "f" am Ende der Zahl? Für float? Was gibt es an und geht das auch bei anderen Typen?

    Ja, es steht für float. 0.00403897 wäre ein literal vom Typ double, mit dem f hintenan ists ein Literal vom Typ float. Ähnliche suffixe gibts auch für integer-Literale:
    u bzw. U steht für unsigned,

    l bzw. L für long, und zwar sowohl bei int-Literalen als auch bei double-Literalen.

    bsp:

    10L //long int
    0x44uL //unsigned long, hexadezimal
    07733lU //unsigned long, oktal (hier sieht man, dass man das l besser als L schreiben sollte)
    
    0.445L //long double
    4e3f //float
    


  • Ok danke für die Klärung 👍
    Immer wieder erfreut, wie schnell man in diesem Forum gute Antworten bekommt



  • Und LL steht für long long . Ist auch wieder mit U kombinierbar, also ULL ist unsigned long long .

    (unsigned) long long gibt's im C++ 03 Standard nicht, ist aber eine sehr übliche Erweiterung. Und IIRC Teil von C++0x.



  • hustbaer schrieb:

    Und LL steht für long long . Ist auch wieder mit U kombinierbar, also ULL ist unsigned long long .

    (unsigned) long long gibt's im C++ 03 Standard nicht, ist aber eine sehr übliche Erweiterung. Und IIRC Teil von C++0x.

    Damit kann man variablen richtig füllen oder auf Null setzen.

    x = 0ull;
    y = 0xFFFFFFFFull;
    


  • ja schrieb:

    Damit kann man variablen richtig füllen oder auf Null setzen.

    x = 0ull;
    y = 0xFFFFFFFFull;
    

    Kann man auch ohne ll. x = 0 tut das gleiche, und 0XFFFFFFFFull garantiert nicht, dass dann alle Bits gesetzt sind - bei sizeof(long long) > 4 haut das nämlich nicht mehr hin. Also lieber mit Standardmitteln arbeiten...


  • Mod

    pumuckl schrieb:

    ja schrieb:

    Damit kann man variablen richtig füllen oder auf Null setzen.

    x = 0ull;
    y = 0xFFFFFFFFull;
    

    Kann man auch ohne ll. x = 0 tut das gleiche, und 0XFFFFFFFFull garantiert nicht, dass dann alle Bits gesetzt sind - bei sizeof(long long) > 4 haut das nämlich nicht mehr hin. Also lieber mit Standardmitteln arbeiten...

    Ich glaube du hast da einen Witz nicht verstanden (0ull, Full). Oder ich sehe das als Witz an und es war erst gemeint. Ich hoffe für "ja", dass es ersteres ist.



  • ersteres



  • SeppJ schrieb:

    Ich glaube du hast da einen Witz nicht verstanden (0ull, Full).

    Gnarf. Arbeit macht wohl humorlos -.-



  • Abgesehen davon dass es ein Witz war, kann man damit trotzdem alle Bits einer unsigned long long Variable setzen.
    Nur sollte mal ~0ull schreiben.


Anmelden zum Antworten