char und unsigned short int Varis



  • Hallo hab ein kleines Problem ! Wenn mir irgendwer helfen könnte wäre echt super!
    Also ich habe eine char Variable(cVar) mit Wert drin z.B.
    0x10
    jetzt weise ich einer unsigned short int Varible (usiVar) den Wert von Char zu mit

    usiVar=(unsigned short int) cVar;

    nun hab ich in der Integervariable den Wert den ich brauche allerdings geht das alles nur so lange gut bis der Wert in der cVar nicht grösser wird als 0x79
    An was liegt das ? Wie kann ich das beheben ?
    Danke im Vorraus :->



  • Systembedingtes Problem?

    Bye, TGGC (Wähle deine Helden)



  • und das heißt für mich?



  • Aller Vermutlichkeit nach ist char bei dir ein signed char. Das heißt, bei Werten über 127 (0x79) kriegst du nen Überlauf, und er fängt bei -128 wieder an. Wenn du das in nen unsigned short int castest, kriegst du das Bitmuster, das bei einem signed short int -128 wäre. Angenommen, short int ist 2 Byte breit, dann wäre das 1111111110000000, was der unsigned short int als 65408 auffasst.

    Siehe dazu auch:

    #include <iostream>
    #include <string>
    
    template<typename int_t>
    std::string binary_string(int_t const &x) {
      std::string ret;
      for(int i = sizeof(int_t) * 8 - 1; i >= 0; --i)
        ret += char('0' + (x >> i & 1));
      return ret;
    }
    
    int main() {
      char c = -128;
      unsigned short int s = c;
    
      std::cout << int(c) << ": " << binary_string(c) << std::endl
                << s << ": " << binary_string(s) << std::endl;
    }
    

    Die Ausgabe davon sieht bei mir so aus:

    -128: 10000000
    65408: 1111111110000000
    


  • denke das du Recht hast dasd der Compilier irgendwas mit den Überlaufbits rumwurschtelt....keine Ahnung ob das Absicht ist ....
    hab es jetzt so gelöst ...
    b=255;
    usiVar=0;

    usiVar=usiVar|cVar;
    usiVar=usiVar&b;

    allerdings geht dein Tipp auch wenn ich einfach unsigned char drauß mache funktioniert es auch
    danke :->


Anmelden zum Antworten