我目前正在开发一个用 C 语言模拟缓存的程序。我一直在研究,我知道如何设置和测试各个位,但我如何从 64 位十六进制的中间提取 x 位地址?
例如,我有一个 64 位的十六进制地址。前 2 位专用于 block 偏移量,接下来的 2 位专用于集合索引,最后 60 位用于标记。如何将前 2 位提取为无符号整数?我怎样才能提取接下来的 2 位?
编辑:这只是一个例子。我希望有一个解决方案可以让您在地址中的任何位置获得任意数量的位
第二次编辑:当我说前 2 位时,我指的是最低有效位。抱歉。
最佳答案
转换为 uintptr_t
来自 <stdint.h>
并使用 >>
和 &
提取位。
例如
uintptr_t ptr_int = (uintptr_t) ptr;
unsigned int bits1 = (unsigned int)((ptr_int >> 62) & 0x3) // First two most significant bits
unsigned int bits2 = (unsigned int)((ptr_int >> 60) & 0x3) // Next two most significant bits
关于c - 将 64 位十六进制地址中的位提取到 C 中的无符号整数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20592252/