了解寄存器中的位移位
understanding bit shifting in registers
我必须使用这些数据更新 32 位寄存器
其中包括位移,我对两件事感到困惑:
- 哪个是LSB,哪个是MSB,
- 这个运算符是什么
|
给定表达式:
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
等等
这种类型的构造通常用于描述进入寄存器的值,记录寄存器的各个字段。
我必须使用这些数据更新 32 位寄存器 其中包括位移,我对两件事感到困惑:
- 哪个是LSB,哪个是MSB,
- 这个运算符是什么
|
给定表达式:
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
等等
这种类型的构造通常用于描述进入寄存器的值,记录寄存器的各个字段。