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位其他位也是如此。
答案 0 :(得分:6)
听起来你应该:
所以:
// 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。)