C - unsigned



  • Hallo,

    ich wollte verhindern, dass man in meiner funktion negative Werte eingeben,

    aber es funktioniert trotzdem:

    #include <stdio.h>

    void funktion ( unsigned ) ;

    int main ( void )
    {
    funktion ( -5 ) ;

    return 0 ;
    

    }

    void funktion ( unsigned int number )
    {
    printf ( "%d" , number ) ;
    }

    gibt -5 aus

    ist das im Parameter also keine Lösung dafür?



  • @JamesNguyen

    %d ist der Formatspecifier für signed int (als Dezimalzahl)

    Nimm %u

    Und das Bitmuster von -5 hat auch eine Entsprechung als unsigned



  • ok danke.

    für %u komm jetzt 42949672911
    was bedeutet das?

    ich habe halt gedacht, dass gar nicht kompiliert wird wenn ich dem Parameter negative Werte zuordne
    aber es kommt ja imer noch was raus

    Deinen zweiten Satz verstehe ich nicht.

    aso ok also negative Zahlen habe trotzdem irgendwie unsigned dartstellungen?



  • @JamesNguyen sagte in C - unsigned:

    ich habe halt gedacht, dass gar nicht kompiliert wird wenn ich dem Parameter negative Werte zuordne
    aber es kommt ja imer noch was raus

    Garbage in, Garbage out.
    Du steckst Müll rein und bekommst Müll raus.

    Deinen zweiten Satz verstehe ich nicht.
    aso ok also negative Zahlen habe trotzdem irgendwie unsigned dartstellungen?

    Ist dir schon mal am Wertebereich der signed/unsigned Typen etwas aufgefallen?
    Bei unsigned char hast du 256 Werte von 0 bis 255
    Bei signed char hast du 256 Werte von (meist) -128 bis +127
    Bei short, int, long und long long ist es entsprechend

    Dabei wird (meist) https://de.wikipedia.org/wiki/Zweierkomplement als Darstellung benutzt.


Anmelden zum Antworten