c ++ - Hvorfor kan jeg ikke direkte indstille en \_\_int64-variabel til -2500000000?

Indlæg af Hanne Mølgaard Plasc

Problem



Dette program er skrevet i VC ++ 6.0 på en WindowsXP-maskine.


Hvis jeg forsøger at indstille en \_\_int64-variabel til -2500000000 direkte, er den afkortet til en 32bit-værdi, og de to komplementer er taget.


\_\_int64 testval;
testval = -2500000000;


På dette tidspunkt er testval lig med 1794967293 (110 1010 1111 1101 0000 0111 0000 0000 binært).


Når jeg sætter variablen til 2500000000 og multiplicerer derefter med negativ, virker den:


\_\_int64 testval;
testval = 2500000000;
testval *= -1;


Det variable testval er lig med -2500000000 (1001 0101 0000 0010 1111 1001 0000 0000 binært).


Nogle ideer?
Tak.

Bedste reference


Få en nyere compiler. VC6 standard compliance er meget dårlig.


I VC6 skal du prøve et suffiks af i64 som i


\_\_int64 toobig = -2500000000i64;


Fundet dokumentationen! [9]

Andre referencer 1


Kompilatoren behandler konstanten 2500000000 som et 32-bit nummer. Du skal udtrykkeligt fortælle det om at behandle det som en long int ved at tilføje en LL til slutningen af ​​konstanten. Så prøv i stedet:


testval = -2500000000LL;


Opdater : Da din kompilator ikke understøtter dette, og du sidder fast med VC6, skal du prøve at bryde den i en værdi, der er resultatet af produktet af to 32 bitnumre som i:


testval = -250000;
testval *= 10000;

Andre referencer 2


Den korrekte syntaks er -2500000000LL. Hvis det ikke virker, få en nyere compiler.