c - 从 unsigned long 中提取 N 到 N+4 的 4 位

标签 c bit-manipulation

考虑以下整数:

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/

相关文章:

c - 我怎样才能知道 C 中接口(interface)的 IP 地址?

c - 文本文件中的无效本地化字符

C 使用按位运算符判断二进制数是否将所有偶数设置为 0

c - c中的位操作

ios - 按位右移 >> 在 Objective-C 中

c - 一维和二维数组的时间复杂度

c - 如何编写信号处理程序来捕获 SIGSEGV?

java - 写入图像位掩码

c++ - 在两个整数之间交换最右边的 N 位

c - 从字符串中删除字符并在删除时动态调整其大小的算法