在C#中,微软没有对Int32数据类型直接提供位测试方法,而是别出心裁,弄了个BitVector32结构。而BitVector32使用掩码作为下标来获取位标志状态,难免会让一些人意识错乱。下面,我通过C#的扩展方法,直接对Int32数据类型增加位测试方法。
源代码:
using System; namespace Splash { public static class BitOperation { /// <summary> /// Bit位测试 /// </summary> /// <param name="n">要测试的整数</param> /// <param name="bit">要测试的Bit位序号</param> /// <returns> /// true:该Bit位为1 /// false:该Bit为0 /// </returns> public static Boolean BitTest(this Int32 n, Int32 bit) { if ((n & (1 << bit)) != 0) { return true; } else { return false; } } /// <summary> /// Bit位设置 /// </summary> /// <param name="n">要设置的整数</param> /// <param name="bit">要设置的Bit位序号</param> public static Int32 BitSet(this Int32 n, Int32 bit) { return n | (1 << bit); } } }
调用示例:
static void BitOperation() { // 扩展方法测试 Int32 n = 0; n = n.BitSet(0); // 设置Bit0 n = n.BitSet(2); // 设置Bit2 Console.WriteLine(n); Console.WriteLine("Bit0 = " + n.BitTest(0)); // 测试Bit0 Console.WriteLine("Bit2 = " + n.BitTest(2)); // 测试Bit2 // BitVector32对比 BitVector32 BV = new BitVector32(n); Console.WriteLine(BV.Data); Console.WriteLine("Bit0 = " + BV[1 << 0]); // 测试Bit0 Console.WriteLine("Bit2 = " + BV[1 << 2]); // 测试Bit2 }