unsigned int x = 0xdeadbeef;
unsigned int y = 0x00000006;
unsigned int z = 0xdeadbee7;
如何从
z
和x
中的值计算y
中的值?y
的1-3位是011
,我希望x
中的值的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。)