73 votes

Vérifier si un bit est activé ou non

Comment vérifier si un certain bit dans un octet est défini?

 bool IsBitSet(Byte b,byte nPos)
{
   return .....;
}
 

199voto

Mario Fernandez Points 8974

Cela ressemble un peu aux devoirs, mais:

 bool IsBitSet(byte b, int pos)
{
   return (b & (1 << pos)) != 0;
}
 

Pos 0 est le bit le moins significatif, Pos 7 est le plus.

12voto

Shimmy Points 23393

Sur la base de la réponse de Mario Fernandez , je me suis demandé pourquoi ne pas l'avoir dans ma boîte à outils en tant que méthode d'extension pratique ne se limitant pas au type de données. J'espère donc que vous pourrez le partager ici:

 /// <summary>
/// Returns whether the bit at the specified position is set.
/// </summary>
/// <typeparam name="T">Any integer type.</typeparam>
/// <param name="t">The value to check.</param>
/// <param name="pos">
/// The position of the bit to check, 0 refers to the least significant bit.
/// </param>
/// <returns>true if the specified bit is on, otherwise false.</returns>
public static bool IsBitSet<T>(this T t, int pos) where T : struct, IConvertible
{
 var value = t.ToInt64(CultureInfo.CurrentCulture);
 return (value & (1 << pos)) != 0;
}
 

10voto

Aamir Points 8357

Voici la solution en mots.

Décale à gauche un nombre entier avec la valeur initiale 1 fois et fais ensuite un ET avec l'octet d'origine. Si le résultat est différent de zéro, le bit est défini, sinon, non. :)

5voto

Brian Chavez Points 2507

Cela fonctionne aussi (testé dans .NET 4):

 void Main()
{
    //0x05 = 101b
    Console.WriteLine(IsBitSet(0x05, 0)); //True
    Console.WriteLine(IsBitSet(0x05, 1)); //False
    Console.WriteLine(IsBitSet(0x05, 2)); //True
}

bool IsBitSet(byte b, byte nPos){
    return new BitArray(new[]{b})[nPos];
}
 

5voto

Mark Byers Points 318575

Déplacez à droite vos n bits d'entrée vers le bas et masquez avec 1, puis testez si vous avez 0 ou 1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X