把第 i 位设置为零?

12 浏览
0 Comments

把第 i 位设置为零?

这个问题已经有了答案

如何设置、清除和切换单个位?

我想把第 i 位设置为零,无论第 i 位是什么。

  unsigned char pt = 0b01100001;
  pt[0] = 0; // its not how we do this... 

如果要将其设置为 1,我们可以使用掩码 pt | (1 << i),但我不确定如何为设置为 0 创建掩码,如果可能的话。

admin 更改状态以发布 2023年5月21日
0
0 Comments

\n\n你可以继续使用这个:\n

// Set bit at position `bitpos` in `pt` to `bitval`
unsigned char bitpos = 1;
unsigned char pt = 0b01100001;
bool bitval = 1;
// Clear the bit
pt &= ~(1u << bitpos);
// Set the bit
pt |= (bitval << bitpos);

0
0 Comments

你只需要将逻辑的OR操作替换为逻辑的AND操作。你需要使用&运算符:

pt = pt & ~(1 << i);

你需要反转你的掩码,因为逻辑与&1运算会保留位而0则清除它……所以你需要在想要清除的位置指定一个0。具体地,做1 << i将给你一个掩码,它是000...010..000,其中1位于位位置,逆转它将会得到111...101...111。逻辑与&与这个掩码将清除你想要的位。

0