我必须使用这些数据更新32位寄存器 其中包括位移,我对两件事感到困惑:
double
给出表达式:
|
,其余15位为3 << 0 |
7 << 3 |
1 << 6 |
0 << 7 |
1 << 7 |
0 << 8 |
0 << 10 |
0 << 11 |
0 << 12 |
0 << 13 |
0 << 14
。
假设寄存器中的初始位为0,数据如何移位?
0
或
011 111 1 0 1 0 0 0 0 0 0 X.......X
答案 0 :(得分:2)
LSB(最低有效位)是其值代表1(2 ^ 0)的位,MSB是其值代表2 ^(n-1)的位,其中n是寄存器中的位数。通常,当以二进制写出时,MSB是最左边的位,LSB是最右边的位。通常情况下,LSB在硬件文档中显示为位0,但我知道有一家公司反转了位编号,因此MSB编号为0.
<<
是C shift-left运算符,将位从LSB移位到MSB。因此,7<<3
代表二进制的111000
。
|
是C位按OR运算符。如果相应的输入位之一为1,则用于组合结果位为1的值。
查看原始值3 << 0 | 7 << 3 | 1 << 6 | 0 << 7 | 1 << 7 | 0 << 8 | 0 << 10 | 0 << 11| 0 << 12 | 0 << 13 | 0 << 14
0000 0000 0000 0011
的 3<<0
来自0000 0000 0011 1000
7<<3
来自0000 0000 0100 0000
1<<6
来自0000 0000 0000 0000
0<<7
等
这种类型的构造通常用于描述进入寄存器的值,注意寄存器的各个字段。