我目前正在从16位寄存器中提取9位(最后9位)。我提取位没有问题,但是当我提取位时,我提取的值最后会有7'0?表示:
注册:1100101011110011
位掩码:1111111110000000
我的提取值是:110010101(405)
或者是:1100101010000000(51840)
提前致谢。
答案 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