Comprobar si un bit está activado o no

Comprobar si un bit está activado o no

suena un poco a tarea, pero:

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

pos 0 es el bit menos significativo, pos 7 es el más.


Basado en la respuesta de Mario Fernandez, pensé por qué no tenerlo en mi caja de herramientas como un método de extensión útil que no se limita al tipo de datos, así que espero que esté bien compartirlo aquí:

/// <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;
}

Nota:no lo use para operaciones críticas de rendimiento, ya que este método siempre convierte a long .


Aquí está la solución en palabras.

Desplace a la izquierda un entero con valor inicial 1 n veces y luego haga un AND con el byte original. Si el resultado es distinto de cero, el bit se establece; de ​​lo contrario, no. :)