int zu char



  • int x = 5;
    char c = (char)x;
    

    Musst aber bei -127 > x > 127 mit Datenverlust rechnen.



  • Thomas++ schrieb:

    Musst aber bei -127 > x > 127 mit Datenverlust rechnen.

    ging das nicht bis +128?
    naja, egal, jedenfalls sind dann alle bits oberhalb der breite eines 'char' wech...



  • Hast Recht, aber es geht von -128 bis +127



  • Thomas++ schrieb:

    Hast Recht, aber es geht von -128 bis +127

    Aber auch nur wenn ein char 8 groß ist.



  • Logo. 😉

    Wo z.B. ist denn ein Char keine 8 Bit lang?



  • Thomas++ schrieb:

    Logo. 😉

    Wo z.B. ist denn ein Char keine 8 Bit lang?

    Gibt durchaus Fälle wo das so ist! 🙂 Festgelegt ist nur das ein Char einem Byte entspricht. Und ein Byte muss durchaus nicht 8 Bit groß sein.

    grüße



  • David_pb schrieb:

    Thomas++ schrieb:

    Hast Recht, aber es geht von -128 bis +127

    Aber auch nur wenn ein char 8 groß ist.

    ...und signed ist (es ist auch erlaubt, daß 'char' vorzeichenlos ist - dann geht der Wertebereich von 0 bis 255).

    (PS: Über die tatsächliche Größe eines Byte legt der Standard afaik nichts fest, außer daß es mindestens 8 Bit hat)



  • CStoll schrieb:

    David_pb schrieb:

    Thomas++ schrieb:

    Hast Recht, aber es geht von -128 bis +127

    Aber auch nur wenn ein char 8 groß ist.

    ...und signed ist (es ist auch erlaubt, daß 'char' vorzeichenlos ist - dann geht der Wertebereich von 0 bis 255).

    (PS: Über die tatsächliche Größe eines Byte legt der Standard afaik nichts fest, außer daß es mindestens 8 Bit hat)

    Genau!

    Folgende Kriterien muss ein Byte erfüllen:

    ➡ Es muss groß genug sein um jedes Zeichen des Basisausführungszeichensatzes speichern zu können
    ➡ Aus einer Folge hintereinander liegender Bits bestehen
    ➡ Adressierbar sein

    In der Datei limits.h gibts ein #define das die Bitanzahl für den verwendeten Compiler angibt: CHAR_BIT.

    Außerdem können für dementsprechende Informationen die numeric_limits<> Traits der STL verwendet werden.

    grüße



  • hmmm diese konvertierung

    int x = 5;
    char c = (char)x;
    

    ist aber nicht wirklich c++, sondern eher c.
    es gibt doch in c++ casts. (wie man die verwendet weiß ich selbst net so genau)
    vielleicht kann jemand anders was dazu sagen.



  • Hallo

    ja das ist ein C-Cast. Aber weder in C noch in C++ braucht man für Übertragung von char zu int und umgekehrt irgendeinen Cast.

    int x = 5;
    char c = x;
    

    Sondern hier must du dir Gedanken über möglichen Datenverlust machen, denn char hat nun mal einen kleineren Wertebereich als int.

    bis bald
    akari



  • akari schrieb:

    ja das ist ein C-Cast. Aber weder in C noch in C++ braucht man für Übertragung von char zu int und umgekehrt irgendeinen Cast.

    int x = 5;
    char c = x;
    

    sollte eigentlich 'ne warnung ausspucken 'konvertierung von ... möglicher datenverlust' o.ä.


Anmelden zum Antworten