Étant donné ce code qui imprime tous les bits dans un entier sur:C# Pourquoi 127 = cette chaîne de bits?
private string getBitLiteral(bool bitVal)
{
if (bitVal)
{
return ("1");
}
else
{
return ("0");
}
}
Int64 intThisHand = 127;
for (int i = 64; i > 0; i--)
{
HttpContext.Current.Response.Write(
getBitLiteral((intThisHand & (1 << i)) != 0)
);
}
Pourquoi faut-il imprimer sur:
1000000000000000000000000011111110000000000000000000000000111111
suis d'abord je looper correctement que je Attendez-vous à ce que les 7 derniers chiffres soient 1's
Deuxièmement, pourquoi y a-t-il des 1 au milieu? Je m'attendrais à ce qu'ils soient tous à l'exception des 7 1 à la traîne.
Ah, comment Je modifie cela pour qu'il fonctionne correctement sur les entiers 64 bits? Il est très important que mon projet gère des entiers 64 bits. –
Je pense qu'ajouter le suffixe l ou le lancer à long suffirait à résoudre ce problème. – CodesInChaos
Une autre façon de gérer le problème 64 bits est d'utiliser '((intThisHand >> i) & 1)! = 0'. Comme intThisHand est déjà un entier de 64 bits, le décalage sera effectué correctement. –