我想计算unsigned char的逆掩码

liv*_*hak 6 c bit-manipulation bitmask

我想为无符号char.meaning计算一个反向掩码,如果反向掩码的原始掩码0xc0应该是0x3f.也就是说所有的位都应该被翻转或反转.我试过下面但似乎没有工作.

int flipBit(int x, unsigned char position)
{
  int mask = 1 << position;
  return x ^ mask;
}

int main(int argc , char* argv[])
{
        uint8_t mask = 0x03;
        uint8_t inverse_mask = 0;
        uint8_t temp = 0;
        int loop = 0;

        for (loop = 0; loop < 8 ; loop ++)
        {
                temp = flipBit(mask,loop);
                inverse_mask |= temp;
        }
        printf("mask 0x%x inv mask 0x%x \n",mask,inverse_mask);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的结果是掩码0x3 inv掩码0xff

我似乎无法在我的代码中找到错误.

Mys*_*ial 6

为什么你不能这样做:

uint8_t mask = 0x03;
uint8_t inverse_mask = ~mask;
Run Code Online (Sandbox Code Playgroud)


Var*_*der 6

使用〜(按位非)运算符.

inverse_mask = ~mask;
Run Code Online (Sandbox Code Playgroud)