了解寄存器中的位移位

understanding bit shifting in registers

我必须使用这些数据更新 32 位寄存器 其中包括位移,我对两件事感到困惑:

  1. 哪个是LSB,哪个是MSB,
  2. 这个运算符是什么|

给定表达式:

3 << 0 | 
7 << 3 | 
1 << 6 | 
0 << 7 | 
1 << 7 | 
0 << 8 | 
0 << 10 |
0 << 11 | 
0 << 12 | 
0 << 13 | 
0 << 14  

剩下的15位是0.

假设寄存器中的初始位为 0,数据如何移位?

011 111 1 0 1 0 0 0 0 0 0 X.......X

x .....X 0 0 0 0 0 0 1 0 1 111 011 

LSB(最低有效位)是其值表示 1 (2^0) 的位,MSB 是其值表示 2^(n-1) 的位,其中 n 是位数寄存器。通常,当以二进制形式写出时,MSB 是最左边的位,LSB 是最右边的位。通常情况下,LSB 在硬件文档中显示为位 0,但我知道有一家公司颠倒了位编号,因此 MSB 编号为 0。

<< 是 C 语言左移运算符,将位从 LSB 移向 MSB。因此7<<3在二进制中表示111000

| 是 C 按位​​或运算符。这用于组合值,如果相应的输入位中的任何一个为一,则结果位为一。

查看您的原始值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

等等

这种类型的构造通常用于描述进入寄存器的值,记录寄存器的各个字段。