Pourquoi mes .net Int64 se comportent-ils comme s'ils étaient Int32?
-
06-07-2019 - |
Question
J'observe un comportement étrange dans un programme .net:
Console.WriteLine(Int64.MaxValue.ToString());
// displays 9223372036854775807, which is 2^63-1, as expected
Int64 a = 256*256*256*127; // ok
Int64 a = 256*256*256*128; // compile time error :
//"The operation overflows at compile time in checked mode"
// If i do this at runtime, I get some negative values, so the overflow indeed happens.
Pourquoi mes Int64 se comportent-ils comme s'ils étaient Int32, alors que Int64.MaxValue semble confirmer qu'ils utilisent 64 bits?
Si cela est pertinent, j'utilise un système d'exploitation 32 bits et la plate-forme cible est définie sur "Tout processeur"
.La solution
Votre serveur RHS n'utilise que des valeurs Int32
. L'ensemble de l'opération est donc exécuté à l'aide de l'arithmétique Int32
, puis du résultat Int32
. / em> est promu longtemps.
Changez-le en ceci:
Int64 a = 256*256*256*128L;
et tout ira bien.
Autres conseils
Utiliser:
Int64 a = 256L*256L*256L*128L;
le suffixe L signifie Int64 littéral, pas de suffixe signifie Int32.
Ce que votre a écrit:
Int64 a = 256*256*256*128
signifie:
Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow