Java 在给定的整数中设置位1-3,并根据需要仅设置位1-3
如何从Java 在给定的整数中设置位1-3,并根据需要仅设置位1-3,java,c++,c,bit-manipulation,bit-fields,Java,C++,C,Bit Manipulation,Bit Fields,如何从x和y中的值计算z中的值 y的第1-3位是011,我希望x中的值的第1-3位替换为y的第1-3位,其他位保持原样。听起来您应该: 屏蔽位1-3,使其无法设置 或y的第1-3位的结果 因此: 请注意,~是按位求逆运算符,因此要清除3位,请取这些位集的倒数,并将该倒数的按位and与当前值一起使用 如果知道在y中只设置位1-3,则可以使用|y而不是|(y&0xe) (请注意,我假设“位1-3”指的是值为8、4和2的位,使用从0开始的正常位计数机制。如果您指的是“底部的三位”,则通常是位0-2
x
和y
中的值计算z
中的值
y
的第1-3位是011
,我希望x
中的值的第1-3位替换为y
的第1-3位,其他位保持原样。听起来您应该:
- 屏蔽位1-3,使其无法设置
- 或y的第1-3位的结果
~
是按位求逆运算符,因此要清除3位,请取这些位集的倒数,并将该倒数的按位and与当前值一起使用
如果知道在y
中只设置位1-3,则可以使用|y
而不是|(y&0xe)
(请注意,我假设“位1-3”指的是值为8、4和2的位,使用从0开始的正常位计数机制。如果您指的是“底部的三位”,则通常是位0-2,并且在代码中使用7而不是0xe。)听起来您应该:
- 屏蔽位1-3,使其无法设置
- 或y的第1-3位的结果
~
是按位求逆运算符,因此要清除3位,请取这些位集的倒数,并将该倒数的按位and与当前值一起使用
如果知道在y
中只设置位1-3,则可以使用|y
而不是|(y&0xe)
(请注意,我假设“位1-3”是指值为8、4和2的位,使用从0开始的正常位计数机制。如果是指“底部三位”,则通常是位0-2,并且在代码中使用7而不是0xe。)@亡灵巫师:好-我会把这一点的澄清留给任何未来想知道的读者,另一件有帮助的事情是如何最好地更新
x
的值,而不是分配给一个新变量z
@necromancer:Goodo-我将把这一点留给任何未来想知道的读者,另一件有用的事情是如何最好地更新x
的值,而不是分配给新变量z
unsigned int x = 0xdeadbeef;
unsigned int y = 0x00000006;
unsigned int z = 0xdeadbee7;
// 0xe == 8 + 4 + 2 (i.e. bits 1-3)
z = (x & ~0xe) | (y & 0xe);