mischen von "__int64" und "unsigned long"



  • hi,

    mal ne frage:
    kann ich ohne probleme mit falschem casting zu bekommen __int64 und unsigned long "mischen" (-> casten) ?? ich henutze verschiedene libs die einerseits size_t(__int64) und andererseits DWORD (unsigned long) benutzen.

    oder muss ich selbst umrechnen? ich mach mir sorgen wegen dem "unsigned": nicht dass die negativen werte einfach gekippt werden!

    thx
    gm



  • _int64 ist kein Standard-Datentyp, deshalb kann man das nicht pauschal sagen. Allerdings gehe ich mal davon aus, daß du auf einer Plattform arbeitest, auf der long 32 Bit hat, was dann du einem Problem beim Casten führen könnte, wenn dein _int64 eben Werte annimmt, die sich mit 32 Bit nicht mehr darstellen lassen.



  • schneidet das casten dann an oberen rand ab? oder ist das ergebnis "nicht definiert" ?



  • Bei der impliziten Typumwandlung werden nicht aufnehmbare Bits abgeschnitten. Allerdings ist eine Implementierung von size_t über __int64 falsch. Der C Standard schreibt vor, dass size_t ein integraler unsigned Typ sein muss, und std::size_t ist sozusagen eine Referenz auf dieses size_t.



  • groovemaster schrieb:

    Allerdings ist eine Implementierung von size_t über __int64 falsch. Der C Standard schreibt vor, dass size_t ein integraler unsigned Typ sein muss

    Dann halt unsigned __int64 - ist auch nicht so tragisch 😉 und ändert an dem 64bit <-> 32bit Problem nichts.


Anmelden zum Antworten