从寄存器中提取特定位时,提取的值必须与寄存器的大小相同吗?

时间:2017-05-03 12:01:33

标签: c bit-manipulation

我目前正在从16位寄存器中提取9位(最后9位)。我提取位没有问题,但是当我提取位时,我提取的值最后会有7'0?表示:

注册:1100101011110011

位掩码:1111111110000000

我的提取值是:110010101(405)

或者是:1100101010000000(51840)

提前致谢。

1 个答案:

答案 0 :(得分:0)

两者都很容易实现。

(unsigned short)reg >> (16-9) == 405, // where as
reg & bitmask == 51840

某些"控制器",例如支持BMI2扩展的x86,但使用位掩码PEXT reg, bitmask进行位提取会得到405。

标题中的具体答案是否定的;输出变量必须包含足够的位。

unsigned char eight_bits = reg >> 8;  // get's top 8 bits