2017-02-26 1 views
2

J'ai la déclaration suivante dans ma classe.Pourquoi le compilateur se plaint alors que la variable est dans la plage du type de données long

public class MyClass 
{ 
    private const long SOME_VALUE= (10 * 1024 * 1024 * 1024); // 10 GB 
    .... 
} 

Cependant compilateur de rapports d'erreurs suivant

erreur CS0220: L'opération déborde au moment de la compilation en mode vérifié

Selon MSDN.

enter image description here

Pour autant que je peux dire, some_value est dans cette gamme pour type long. Des pensées sur pourquoi je reçois cette erreur de compilation?

Répondre

4

Chacune des valeurs individuelles du calcul est int. Le compilateur les multiplie donc par int s, d'où le dépassement. Le comme long solution la plus simple consiste à marquer un ou tous en utilisant le L suffix, cela forcera le calcul à faire comme long:

private const long SOME_VALUE= 10L * 1024 * 1024 * 1024; 
2

Ajouter L suffixe:

public class MyClass 
{ 
    private const long SOME_VALUE= (10L * 1024L * 1024L * 1024L); // 10 GB 
    .... 
} 

Sans L suffixe (signifie long) Le compilateur traite l'expression à int et avertit du dépassement d'entier.