#define BitSet1(TYPE,dwX, nbit) (dwX =dwX | (TYPE)(0x00000000+pow(2, nbit)))
#define BitSet0(TYPE,dwX, nbit) (dwX =dwX & (TYPE)(0xFFFFFFFF-pow(2, nbit)))
#define BitTest(TYPE,dwX, nbit) ((  (dwX >>nbit) & 0x01) > 0)
这是我之前编写的, 只适用于最高32位的类型(DWORD)现在32位标志不能满足我的需求了, 我想用BYTE 或者 char 来做类型, 支持任意长度的, 对这3个宏应该怎样改变一下呢?谢谢!

解决方案 »

  1.   

    #define BitSet1(TYPE, dwX, nbit) (dwX[nbit/8+1] =dwX[nbit/8+1] | (TYPE)(0x00+pow(2, nbit%8)))
    #define BitSet0(TYPE, dwX, nbit) (dwX[nbit/8+1] =dwX[nbit/8+1] & (TYPE)(0xFF-pow(2, nbit%8)))
    #define BitTest(TYPE,dwX, nbit) ((  (dwX[nbit/8+1] >>nbit%8) & 0x01) > 0)
      

  2.   

    更正:
    #define BitSet1(TYPE,dwX, nbit) (dwX[nbit/8+1]==(dwX[nbit/8+1] = dwX[nbit/8+1] | (BYTE)(0x00+pow(2, nbit%8)))?(TYPE)dwX:(TYPE)dwX)
    #define BitSet0(TYPE,dwX, nbit) (dwX[nbit/8+1]==(dwX[nbit/8+1] =dwX[nbit/8+1] & (BYTE)(0xFF-pow(2, nbit%8)))?(TYPE)dwX:(TYPE)dwX)
    #define BitTest(dwX, nbit) (( (dwX[nbit/8+1] >>nbit%8) & 0x01) > 0)
      

  3.   

    郁闷,再更正一次:
    #define BitSet1(TYPE,dwX, nbit) (dwX[nbit/8]==(dwX[nbit/8] = dwX[nbit/8] | (BYTE)(0x00+pow(2, nbit%8)))?(TYPE)dwX:(TYPE)dwX)
    #define BitSet0(TYPE,dwX, nbit) (dwX[nbit/8]==(dwX[nbit/8] =dwX[nbit/8] & (BYTE)(0xFF-pow(2, nbit%8)))?(TYPE)dwX:(TYPE)dwX)
    #define BitTest(dwX, nbit) (( (dwX[nbit/8] >>nbit%8) & 0x01) > 0)
      

  4.   

    #define BIT_SET(bVal, nPos, fZero) fZero==0?(bVal&(^(1<<nPos))):(bVal|(1<<nPos))
    // bVal: flag[8]  nPos:第n位   fZero:置1还是置0