提问者:小点点

检查位是否设置


如何检查字节中的某个位是否被设置?

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

共2个答案

匿名用户

听起来有点像家庭作业,但是:

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

pos 0是最低有效位,pos 7是最高有效位。

匿名用户

基于Mario Fernandez的回答,我想为什么不把它作为一种不局限于数据类型的方便的扩展方法放在我的工具箱中,所以我希望在这里分享它是可以的:

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

注意:不要用于性能关键操作,因为此方法总是转换为long