unsigned int x = 0xdeadbeef;
unsigned int y = 0x00000006;
unsigned int z = 0xdeadbee7;

如何从zx中的值计算y中的值?
y的1-3位是011,我希望x中的值的1-3位被y的1-3位代替,其他位保持原样。

最佳答案

听起来您应该:

  • 屏蔽掉1-3位,以便不能设置它们
  • 或y
  • 的1-3位的结果

    所以:
    // 0xe == 8 + 4 + 2 (i.e. bits 1-3)
    z = (x & ~0xe) | (y & 0xe);
    

    请注意,~是按位求逆的运算符,因此要清除3位,需要对那些位的求逆,并将该取反的按位AND与当前值一起使用。

    如果您知道| y中将只设置1-3位,则可以只使用| (y & 0xe)而不是y

    (请注意,我已经假设“位1-3”是指使用从0开始的普通位计数机制,值为8、4和2的位。如果要表示“最低3位”,通常为0-2位,您将在代码中使用7而不是0xe。)

    07-24 14:37