[C#] 纯文本查看 复制代码 
/// <summary>
/// 位操作类
/// </summary>
public static class BitHelper
{
	/// <summary>
	/// 获取某个位
	/// </summary>
	/// <param name="byt"></param>
	/// <param name="index"></param>
	/// <returns></returns>
	public static byte GetBit(this byte byt, int index)
	{
		return (byte)((byt >> index) & 1);
	}
	/// <summary>
	/// 获取字节的某些位
	/// </summary>
	/// <param name="byt">字节数组</param>
	/// <param name="index">起始位置</param>
	/// <param name="len">长度</param>
	/// <returns></returns>
	public static byte GetBit(this byte byt, int index, int length)
	{
		byte mask = GetMask(length);
		return (byte)((byt >> index) & mask);
	}
	/// <summary>
	/// 获取屏蔽位
	/// </summary>
	/// <param name="length"></param>
	/// <returns></returns>
	public static byte GetMask(int length)
	{
		return (byte)((1 << length) - 1);
	}
	/// <summary>
	/// 获取屏蔽位
	/// </summary>
	/// <param name="index"></param>
	/// <param name="length"></param>
	/// <returns></returns>
	public static byte GetMask(int index, int length)
	{
		byte mask = GetMask(length);
		return (byte)(mask << index);
	}
	/// <summary>
	/// 清0
	/// </summary>
	/// <param name="byt"></param>
	/// <param name="index"></param>
	public static byte ClearBit(this byte byt, int index)
	{
		return byt &= (byte)(~(1 << index));
	}
	/// <summary>
	/// 清除字节的某些位
	/// </summary>
	/// <param name="byt">字节数组</param>
	/// <param name="index">起始位置</param>
	/// <param name="len">长度</param>
	public static byte ClearBit(this byte byt, int index, int length)
	{
		byte mask = GetMask(index, length);
		return byt &= (byte)(~mask);
	}
	/// <summary>
	/// 某位置1
	/// </summary>
	/// <param name="byt"></param>
	/// <param name="index"></param>
	public static byte SetBit(this byte byt, int index)
	{
		return byt |= (byte)(1 << index);
	}
	/// <summary>
	/// 某些位置1
	/// </summary>
	/// <param name="byt"></param>
	/// <param name="index"></param>
	/// <param name="length"></param>
	public static byte SetBit(this byte byt, int index, int length)
	{
		byte mask = GetMask(index, length);
		return byt |= (byte)mask;
	}
	/// <summary>
	/// 设置字节的某些位
	/// </summary>
	/// <param name="byt">字节数组</param>
	/// <param name="index">起始位置</param>
	/// <param name="len">长度</param>
	/// <param name="value">设置值</param>
	public static byte SetBit(this byte byt, int index, int length, int value)
	{
		int mask = GetMask(length);
		byt = byt.ClearBit(index, length);
		return byt |= (byte)((value & mask) << index);
	}
	/// <summary>
	/// 取反
	/// </summary>
	/// <param name="byt"></param>
	/// <param name="index"></param>
	/// <param name="length"></param>
	public static byte ReverseBit(this byte byt, int index, int length)
	{
		byte mask = GetMask(index, length);
		return byt ^= mask;
	}
	/// <summary>
	/// 某位取反
	/// </summary>
	/// <param name="byt"></param>
	/// <param name="index"></param>
	public static byte ReverseBit(this byte byt, int index)
	{
		return byt ^= (byte)(1 << index);
	}
	/// <summary>
	/// 
	/// </summary>
	/// <param name="byt"></param>
	/// <param name="index"></param>
	/// <param name="len"></param>
	/// <returns></returns>
	public static UInt16 ClearBit(this UInt16 data, int index, int length)
	{
		int mask = (2 << length) - 1;
		return (UInt16)(data & (~(mask << index)));
	}
} 
 |