nec*_*cer 1 c c++ java bit-manipulation bit-fields
unsigned int x = 0xdeadbeef;
unsigned int y = 0x00000006;
unsigned int z = 0xdeadbee7;
Run Code Online (Sandbox Code Playgroud)
如何计算值z从价值观x和y?
第1-3位y是011,我希望将值1-3中的x位1-3替换为第1-3位,y将其他位保持原样.
听起来你应该:
所以:
// 0xe == 8 + 4 + 2 (i.e. bits 1-3)
z = (x & ~0xe) | (y & 0xe);
Run Code Online (Sandbox Code Playgroud)
注意,它~是按位逆运算符,因此要清除3位,您可以取这些位的反转,并使用该逆的按位AND和当前值.
如果您知道只有1-3位将被设置,您可以使用| y而不是.| (y & 0xe)y
(注意,我假设"1-3位"表示值为8,4和2的位,使用从0开始的正常位计数机制.如果您的意思是"底部三位",那么通常是0-2位,你在代码中使用7而不是0xe.)
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |