unsigned int



  • hiho ihrs,
    habe eine kleine Frage:

    unsigned int u = 123;
    

    Findet hier ein impliziter Cast von "signed int" nach "unsigned int" statt,
    oder ist 123 bereits "unsigned int" ? 😕

    thx euch



  • es ist ein int.
    unsigned int wäre es, wenn du 123u schreibst

    macht aber (zumindest hier) keinen unterschied.

    bb



  • unskilled schrieb:

    es ist ein int.

    k dementsprechend ein findet ein cast nach unsigned statt,
    thx dir 😉



  • Dweb schrieb:

    hiho ihrs,
    habe eine kleine Frage:

    unsigned int u = 123;
    

    Findet hier ein impliziter Cast von "signed int" nach "unsigned int" statt,
    oder ist 123 bereits "unsigned int" ? 😕

    thx euch

    Du hast per Deklaration/Definition entschieden das es ein unsigned int ist!
    Das der Wert auch durch einen int darstellbar ist, ist Nebensache! Implizit kein Cast!
    🕶



  • otto8 schrieb:

    Das der Wert auch durch einen int darstellbar ist, ist Nebensache! Implizit kein Cast!

    ahh k,
    dann ist es bei float/double wohl auch so, oder?

    float f = 0.7f;
    double d = f; // also hier kein cast
    

    [EDIT] obwohl, doch hier muss ein cast sein... double is ja größer als float...



  • 123 ist ein Literal vom Typ int. Der Compiler sieht aber dass du es einem unsigned int zuweist und bauts schon zur Compilezeit zu einem unsigned int um. DU brauchst also nicht zu befürchten dass er irgendwo den int in das Programm schreibt und dann bei der Ausführung jedesmal erst rumcastet. Genauso bei float/double und short/chars, die mit int-Literalen initialisiert werden:

    int i = 5;
    short s = i; //Warnung, dass Informationen verloren gehen können beim cast int->short
    
    short s2 = 5; //keine Warnung, der Compiler kann das zur Compilezeit schon richtig hinbiegen
    

  • Mod

    Es ist hilfreich, die Begriffe präziser zu verwenden, andernfalls kann die Fragestellung sehr verwirrend sein.

    Ein Cast-Ausdruck bzw. Cast (cast expression) ist eine bestimmte Art Ausdruck. Es gibt davon in C++ 6 verschiedene Arten.

    EIn Konvertierung ist ein bestimmter Vorgang, der beim Programmablauf aus dem Wert eines Typs einen Wert eines anderen Typs produziert.

    Dweb schrieb:

    hiho ihrs,
    habe eine kleine Frage:

    unsigned int u = 123;
    

    Findet hier ein impliziter Cast von "signed int" nach "unsigned int" statt,
    oder ist 123 bereits "unsigned int" ? 😕

    thx euch

    1. Ein Cast ist hier nicht zu finden.
    2. 123 ist ein Literal des Typs int, folglich erfordert die Initialisierung von u die impliziete Konvertierung dieses Wertes.


Log in to reply