signed/unsigned integer



  • Hallo,

    ich habe mal eine (Anfänger) Verständnisfrage zum signed und unsigned integer Datentyp.
    In dem Kurs, den ich gerade lese, steht folgendes Programm um den Unterschied von signed und unsigned zu verdeutlichen:

    #include <iostream> 
    
    /* This program shows the difference between 
    signed and unsigned integers. */ 
    
    using namespace std; 
    
    int main() 
     { 
        short int i; // a signed short integer short unsigned 
        int j; // an unsigned short integer
        j = 60000;
        i = j;
        cout << i << "  " << j;
    
        return 0 ;
     }
    

    Ich dachte sowohl integer als auch short integer ist als default signed? Wo wird denn hier ein Datentyp als unsigned definiert?

    short int i; // a signed short integer short unsigned
    

    Was soll denn der Kommentar bedeuten? Gleichzeitig signed und unsigned??

    int j; // an unsigned short integer
    

    Und hier ist int weder short noch unsigned, oder?

    Wahrscheinlich gibt es eine einfach Erklärung und/oder ich habe es einfach nicht verstanden. Aber ich würde es wirklich gerne verstehen und freue mich über jeden Hinweis!

    Hier noch die Kopie aus dem Buch:
    http://img517.imageshack.us/img517/7669/integere.jpg

    Danke!



  • Ich weis nicht genau was der standard dazu sagt, ober normalerweise wird default signed angenommen.
    short int == signed short int == signed short == short
    int == signed int
    In dem Beispiel wäre somit keine Variable unsigned.
    Außerdem ist j vom typ int, und nicht short int.

    Also
    i ist "a signed short integer"
    j ist "a signed integer"

    Im Visual C++ Compiler kann man einstellen, dass defaultmäßig unsigned angenommen wird. Ich glaube aber kaum, dass der autor so etwas meint...



  • Nochmal zum Versändnis:

    Möglichkeiten "unsigned short" auszudrücken:
     - unsigned short int
     - unsigned short
    
    Möglichkeiten "signed short" auszudrücken:
     - signed short
     - signed short int
     - short
     - short int
    
    Möglichkeiten "unsigned int" auszudrücken:
     - unsigned int
     - unsigned
    
    Möglichkeiten "signed int" auszudrücken:
     - int
     - signed int
     - signed
    


  • So wie du es erklärst, habe ich es auch verstanden.
    MMn verdeutlicht das Programm den Unterschied zw. short int und int.
    Wobei, was man dabei anscheinend lerne sollte, die erste Bit Stelle als Vorzeichen interpretiert wird, wenn j i zugewiesen wird.

    Nur was sollen die Kommentare? Die machen doch gar keinen Sinn?



  • Die Kommentare snd definitiv falsch. So ist es richtig:

    #include <iostream> 
    
    /* This program shows the difference between 
    signed and unsigned integers. */ 
    
    using namespace std; 
    
    int main() 
    { 
        short int i; // a signed short integer
        unsigned short int j; // an unsigned short integer
        j = 60000; 
        i = j;
        cout << i << "  " << j; 
        /*
            Ausgabe: -5536 60000
        */
    
        return 0 ; 
    
    }
    


  • Alles klar. Danke für die Hilfe!



  • IWish schrieb:

    Im Visual C++ Compiler kann man einstellen, dass defaultmäßig unsigned angenommen wird.

    Ich glaube du meinst, dass man vorgeben kann ob char signed oder unsigned ist.



  • Was ich meine ist unter
    Projekt-Eigenschaften -> Konfigurationseigenschaften -> C/C++ -> Sprache -> Standardzeichen "unsigned" [der Standardzeichentyp wird auf unsigned gesetzt].
    Ist damit char gemeint? Ich habe die Option noch nie gebraucht 😃

    Und mich würde mal interessieren, was der Standard dazu sagt? Ist default signed angenommen oder ist das Implementierungsspezifisch?



  • Die integralen Typen short , int und long sind ohne Angabe immer signed . Bei char hängt es von der Implementierung ab, ob das Layout (Bitmuster im Speicher) gleich wie bei unsigned char oder signed char aufgebaut ist. In jedem Falle sind das jedoch drei verschiedene Typen.


Anmelden zum Antworten