提取位

Ste*_*hen 5 c bit-manipulation memory-address

在C中,我有一个32位字表示一个地址(我把它存储在一个无符号长,希望没问题).现在从我收集的内容来看,地址的一部分包含页码,另一部分包含偏移量.我想知道如何只提取给我页码的位.我已经计算出前22个最重要的位是页码,其他10位是页面偏移.我怎样才能抓住页码的位?我想我可以通过一些按位操作来做到这一点,但我不确定如何.

Mar*_*ers 11

使用bitshift运算符提取所需的位.

pageNumber = x >> 10;
offset = x & ((1 << 10) - 1);
Run Code Online (Sandbox Code Playgroud)

对于页码,>>运算符将位向下移位,因此丢失了最不重要的位.

对于偏移量,((1 << 10) - 1)创建一个由10个位组成的位掩码,用于仅选择10个最低有效位并忽略最高有效位.