在给定int的int中设置位1-3,仅根据需要设置位1-3

时间:2014-07-25 06:13:05

标签: java c++ c bit-manipulation bit-fields

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 个答案:

答案 0 :(得分:6)

听起来你应该:

  • 屏蔽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和#34;你的意思是值为8,4和2的位,使用从0开始的正常位计数机制。你的意思是"底部的三位",通常是0-2位,你在代码中使用7而不是0xe。)