__int64 in unsigned __int64 konvertieren



  • Mache ich das am besten einfach über einen reinterpret_cast? Ich habe ja gelernt das dieses casten nicht so willkommen ist, deswegen die Frage, ob es da einen besseren Weg gibt.

    Eine andere Sache die mir vielleicht ein Moderator beantworten kann :). Gehören meine Beiträge überhaupt hierher? __int64 ist ja ein MS-Datentyp aber nicht MFC.



  • reinterpret_cast klappt gar nicht... ich dachte immer zwischen unsigned und signed gibt es keine Bitunterschiede *grübel*...

    error C2440: 'reinterpret_cast': '__int64' kann nicht in 'unsigned __int64' konvertiert werden



  • Es scheint als ob das reinterpret_cast da ein Problem hat... mach es einfach *ohne* casten...

    #include <windows.h>
    #include <tchar.h>
    
    int _tmain()
    {
      __int64 i64 = -1;
      unsigned __int64 ui64 = 0;
      ui64 = i64;
    }
    


  • Oder, wenn du range-checking willst, mit boost::numeric_cast.
    Oder, wenn du unbedingt einen expliziten cast schreiben willst, aber kein range checking brauchst, dann mit static_cast.



  • Ich bins nochmal. Also das ganze klappt jetzt. Ich habe jetzt aber trotzdem noch eine Frage.

    Wenn ich folgendes schreibe

    unsigned int Val = 4294967295;
    
    if (Val == -1)
      TRACE("-1\n");
    
    if (Val == 4294967295)
      TRACE("4294967295\n");
    

    So wird sowohl die -1 als auch die 4294967295 ausgegeben. Kann ich das irgendwie verhindern? Also das der Vergleich == -1 nicht richtig ist, weil ja mit Val als unsigned int verglichen wird.

    Danke


Anmelden zum Antworten