Je suis un programmeur Java essayant de migrer vers C#, et ce Gotcha m'a déconcerté légèrement:Bitwise - ou semble avoir une distribution implicite à long terme. Cela peut-il être évité?
int a = 1;
a = 0x08000000 | a;
a = 0x80000000 | a;
La première ligne compile très bien. La seconde ne le fait pas. Il semble reconnaître qu'il existe une constante avec un bit de signe, et pour une raison quelconque, il décide de jeter le résultat d'une longue, entraînant l'erreur:
Cannot implicitly convert type 'long' to 'int'.
An explicit conversion exists (are you missing a cast?)
La solution que j'ai à ce jour est:
a = (int)(0x80000000 | a);
qui traite de la fonte, mais laisse encore un avertissement:
Bitwise-or operator used on a sign-extended operand;
consider casting to a smaller unsigned type first
Quelle serait la bonne façon de C# pour exprimer une erreur/avertissement/moyen à long libre?
Non, c'est 'uint': http://msdn.microsoft.com/en-us/library/aa664674%28VS.71%29.aspx – Joey
En fait, cela ressemble à la meilleure solution. Merci. – izb
Et pour le code-tidyness parce que j'ai beaucoup de masques: privé const int MASK_80000000 = non coché ((int) 0x80000000); – izb