对于我正在进行的项目,一个“字”定义为10位长度,根据我的程序的作用,我需要用二进制数更新这个单词中的特定位(当然最多比特长度的限制)。我的问题是我不知道如何创建这些位,然后如何读取它们。
例如,“word”设置如下:
bits 0-1 - representing something A - can get values between 0-3.
bits 2-3 - representing something B - can get values between 0-3.
bits 4-5 - C - values 0-3.
bits 6-9 - D - values 0-15.
当我的程序运行时,我需要决定在每组中填充什么。在那之后,当我的单词完全填满时,我需要分析结果,意思是翻阅完整的单词,并从0-1位理解A代表什么,从B-2代表的位2-3,依此类推..
另一个问题是第9位是最高位,这意味着该字从第6-9位到第4-5位填充到2-3到0-1,之后从第9位打印到0 ,而不是常规数组。
我尝试用位域结构来做,但问题是虽然“字”总是10位长,但如上所述的细分只是“字”的一个例子。它也可以是0-1代表某些东西,而2-9代码则是其他东西。
我有点失落,不知道怎么做,如果有人可以帮助我,我会很高兴的。 谢谢!
答案 0 :(得分:1)
只需模拟一个"字"作为uint16_t
,并设置适当的位。
这样的事情:
typedef uint16_t word;
word word_set_A(word w, uint8_t a)
{
w &= ~3;
return w | (a & 3);
}
uint8_t word_get_A(word w)
{
return w & 3;
}
word word_set_B(word w, uint8_t b)
{
w &= ~0xc0;
return w | ((b & 3) << 2);
}
......等等。