Kontrollera om en bit är inställd eller inte

Kontrollera om en bit är inställd eller inte

låter lite som läxor, men:

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

pos 0 är minst signifikant bit, pos 7 är mest.


Baserat på Mario Fernandez svar tänkte jag varför inte ha det i min verktygslåda som en praktisk förlängningsmetod som inte är begränsad till datatyp, så jag hoppas att det är OK att dela det här:

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

Obs:Använd inte för prestandakritiska operationer, eftersom denna metod alltid konverterar till long .


Här är lösningen i ord.

Vänsterskift ett heltal med initialt värde 1 n gånger och gör sedan ett AND med den ursprungliga byten. Om resultatet inte är noll, sätts bit annars inte. :)