Unsigned



  • kiraaaa da bin ich da ^^

    kann mir mal jemand please erklären,wofür unsigned gut ist?
    man könnte ja auch nur int xx = 12; schreiben,aber was bringt das wirklicht?

    mfg



  • unsigned steht im Gegensatz zu signed für vorzeichenlose integer. Das sind absolute Basics und steht in deinem Buch/Tutorial.



  • Der Datentyp int ist vorzeichenbehaftet d. h. es kann negativ oder positiv sein.
    Ein signed int ist von -32768 bis +32767 groß.

    Mit dem unsigned sagst du, es soll keine negative Zahlen geben, wodurch sich die Zahlenmenge verdoppelt, sprich 0 bis 65535.



  • ac!d schrieb:

    Ein signed int ist von -32768 bis +32767 groß.

    Das hängt aber sehr stark von der Plattform ab.

    ac!d schrieb:

    Mit dem unsigned sagst du, es soll keine negative Zahlen geben, wodurch sich die Zahlenmenge verdoppelt, sprich 0 bis 65535.

    Die Zahlenmenge wird nicht verdoppelt. Es wird lediglich der Zahlenbereich verschoben.



  • Ja signed heißt vorzeichenbehaftet. Wenn du z.B. "signed int a;" deklarierst, dann kann a Werte von -2147483648 bis 2147483647
    annehmen (int hat in diesem Fall 4 Byte). Beispiel:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        signed int a=2147483647;
        cout << a+1 << endl; // Ausgabe: -2147483648
        cout << a+100 << endl; // Ausgabe: -2147483549
    
        return 0;
    }
    

    Und unsigned heißt vorzeichenlos, also würde hier "unsigned int a" Werte von 0 bis 4294967295 annehmen (int hat wieder 4 Byte).
    Beispiel:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        unsigned int a=2147483647;
        cout << a+1 << endl; // Ausgabe: 2147483648
        cout << a+100 << endl; // Ausgabe: 2147483747
    
        return 0;
    }
    


  • ac!d schrieb:

    Der Datentyp int ist vorzeichenbehaftet d. h. es kann negativ oder positiv sein.
    Ein signed int ist von -32768 bis +32767 groß.

    Mit dem unsigned sagst du, es soll keine negative Zahlen geben, wodurch sich die Zahlenmenge verdoppelt, sprich 0 bis 65535.

    Allgemein kann man keine Aussagen über die größe eines Datentyps machen.
    Es gilt:
    char ist immer 1 Byte
    short ist kleiner bzw. gleichgroß wie int
    int ist kleiner bzw. gleichgroß wie long
    signed und unsigned können immer eine gleichgroße Zahlenmenge aufnehmen (dabei wird nichts verdoppelt! Nur der Wertebereich verschiebt sich ins Positive bzw. Negative)

    Gruß TheImaginator



  • TheImaginator schrieb:

    char ist immer 1 Byte
    short ist kleiner bzw. gleichgroß wie int
    int ist kleiner bzw. gleichgroß wie long

    und 'int' hat mindestens 16 bits.
    passen also mindestens 2^16 verschiedene zahlen rein...
    🙂



  • thx for Answer 😉

    aber wenn ich als bsp.(sry für themawechsel)

    unsigned int a = 0145;
    unsigned int b = 0257;
    unsigned int c = a & b;
    cout<<c;
    

    schreibe,sollte doch was mit 0101100(nur als Beispiel!!!) kommen,warum nicht?
    ich will ja bitset machen und nicht irgendwelche ergebnisse die 239 oder 74 oder anders lautet 😡

    lg fan 🙂



  • FaNaTiC schrieb:

    unsigned int a = 0145; // <- oktal
    unsigned int b = 0257; // <- oktal
    unsigned int c = a & b;
    cout<<c;
    


  • hi

    und was muss ich im namen &%/&$/% hinschreiben,damit 00101010 erauskommen kann?



  • So, bisher hat aber immernoch niemand in diesem Thread die Anfangsfrage beantwortet, nämlich, wofür 'unsigned' denn nun gut ist. Ich bitte darum, das noch zu tun, die Antwort würde mich nämlich auch interessieren. Bisher kenne ich keinen guten Grund für 'unsigned'.



  • Konrad Rudolph schrieb:

    So, bisher hat aber immernoch niemand in diesem Thread die Anfangsfrage beantwortet, nämlich, wofür 'unsigned' denn nun gut ist. Ich bitte darum, das noch zu tun, die Antwort würde mich nämlich auch interessieren. Bisher kenne ich keinen guten Grund für 'unsigned'.

    Nimm mal was einfaches z.B. einen Dateizeiger, warum sollte der signed sein?



  • 123 schrieb:

    Konrad Rudolph schrieb:

    So, bisher hat aber immernoch niemand in diesem Thread die Anfangsfrage beantwortet, nämlich, wofür 'unsigned' denn nun gut ist. Ich bitte darum, das noch zu tun, die Antwort würde mich nämlich auch interessieren. Bisher kenne ich keinen guten Grund für 'unsigned'.

    Nimm mal was einfaches z.B. einen Dateizeiger, warum sollte der signed sein?

    Warum nicht? Es handelt sich eh um eine schlechte Approximation. Meiner Meinung hat man hier mehrere Möglichkeiten der Darstellung, je nach Grad der Abstraktion: man kann ein 'int' nehmen -- oder ein 'FilePointer'. Klar, 'unsigned int' wäre auch eine Möglichkeit, ist IMHO aber unnötig. Man sollte eh die beste Möglichkeit nehmen, also 'FilePointer'.



  • Nachtrag: Mir ist natürlich klar, dass die Prozessorarchitektur nunmal vorzeichenlose Typen zur Verfügung stellt. Wenn man also auf Maschinenebene argumentiert, kann man durchaus 'unsigned int' verwenden. Generell programmiert man ja aber auf einer viel höheren Abstraktionsebene.



  • Was geht schneller bei einem Vergleich "<" ?



  • Wieviel Speicher kann man mit signed addressieren und wieviel mit unsigned?



  • THX 1138 schrieb:

    Was geht schneller bei einem Vergleich "<" ?

    Sollte gleichschnell sein, wenn ich mich nicht irre. Meiner Meinung nach wird in beiden Fällen dieselbe Anzahl an Gattern benötigt, nur dass das erste Gatter jeweils umgekehrte Eingänge besitzt.



  • Apollon schrieb:

    Wieviel Speicher kann man mit signed addressieren und wieviel mit unsigned?

    Hmm. Ist das heutzutage relevant? Wenn der Speicher von 'int' nicht recht nimmt man halt die nächstgrößere Einheit. Dafür ein 'unsigned int' zu verwenden finde ich popelig, denn früher oder später wird man auch damit Probleme haben, man hat das Problem in guter Politiker-Manier also nicht gelöst sondern nur verschoben.



  • Zum logischen Shiften braucht man z.B. unsigned Datentypen und die ganze
    Bit-Logig hat mit dem Vorzeichen-Bit auch nichts am Hut.



  • 123 schrieb:

    Zum logischen Shiften braucht man z.B. unsigned Datentypen und die ganze
    Bit-Logig hat mit dem Vorzeichen-Bit auch nichts am Hut.

    Was hat das Vorzeichenbit mit Bit-Logik zu tun? Bei mir klappt das alles wunderbar, egal ob mit oder ohne Vorzeichen.

    Zum logischen Shift: Wieso? Abgesehen davon implementiert C++ doch eh nur arithmetisches Bitschieben.



  • Das rechtsschieben von negativen Integern ist nicht festgelegt. Es kann logisch oder arithmetisch geshiftet werden.


Anmelden zum Antworten