【问题标题】:Set the i-th bit to zero? [duplicate]将第 i 位设置为零? [复制]
【发布时间】:2014-11-18 04:49:09
【问题描述】:

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

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

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

【问题讨论】:

  • 尝试按位与。
  • @JasonBaker 不,该帖子没有显示如何将位设置为零。
  • @GivenPie 接受的答案对每个任务都有一个部分(设置、清除、切换、检查...)
  • @JasonBaker 对,很明显我什至不明白清除是什么意思。

标签: c bit-manipulation


【解决方案1】:

您只需将逻辑OR 替换为逻辑AND 操作。为此,您可以使用 & 运算符:

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

您必须反转您的掩码,因为带有1 的逻辑ANDing 将保持该位,而0 将清除它...所以您需要指定一个@ 987654328@在您要清除的位置。具体来说,执行1 &lt;&lt; i 将为您提供一个掩码000...010..000,其中1 位于您想要的位位置,并将其反转将给出111...101...111。逻辑ANDing 将清除您想要的位。

【讨论】:

  • 谢谢,很有道理
  • @GivenPie - 不用担心!...但是被指出的重复问题要全面得多。建议你也读一读。
【解决方案2】:

你可以坚持这个:

// 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2023-04-09
    相关资源
    最近更新 更多