在给定的int中设置1-3位,只设置1-3位

set bits 1-3 in an int given an int with only bits 1-3 set as desired

本文关键字:设置 1-3位 int      更新时间:2023-10-16
unsigned int x = 0xdeadbeef;
unsigned int y = 0x00000006;
unsigned int z = 0xdeadbee7;

如何从xy的值计算出z的值?

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位,你取这些位集的逆,并使用逆与当前值的位与。

如果你知道只有1-3位会在y中设置,你可以使用| y而不是| (y & 0xe)

(注意,我假设"bits 1-3"是指值为8,4和2的位,使用从0开始的正常比特计数机制。如果你指的是"底部三位",那通常是0-2位,你应该在代码中使用7而不是0xe。