考虑以下整数:
uint32_t p = 0xdeadbeef;
我想得到:
- 0..3 位所以我做了:
p & ((1 << 4) - 1);
一切顺利。
然而,对于 4..7,我的尝试并没有按预期进行:
(p >> 16) & 0xFFFF0000
为什么它不提取我想要的位?我不动吗p
向右16位再取出4位?
非常感谢能给出解释的答案,谢谢!
最佳答案
如果你想从 4..7 获取位
(p>>4) & 0xf
如果你想获取从N
到(N+4-1)
的位
(p>>N) & 0xf
而N
应该是<32(如果你的系统是32位系统)。否则你会得到未定义的行为
关于c - 从 unsigned long 中提取 N 到 N+4 的 4 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19635437/