MSB&LSB与Endianness
2016-12-25 20:19
369 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
http://www.buczynski.com/Proteus/msblsb.html
https://en.wikipedia.org/wiki/Most_significant_bit
https://en.wikipedia.org/wiki/Least_significant_bit
https://en.wikipedia.org/wiki/Bit_numbering
https://support.microsoft.com/en-us/kb/130861
https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html
https://support.microsoft.com/en-us/kb/102025
https://en.wikipedia.org/wiki/Endianness
LSB = least significant bit 最低有效位
由于我们普遍使用的记数方法一般都是Positional notation(位置记法),不同的位置其“权”不同。所以,一般地,MSB也可称做left-most bit,LSB也可称作right-most bit。
例如,数值150的二进制表示法:
2
1
2
这里,bit7就是MSB,bit0就是LSB.
通俗的说,就是在一个数值中,占比重最高的位即这个数的最高位叫MSB,占比重最低的位即这个数的最低位叫LSB。
严格地讲,MSB和LSB指二进制数的bit位。宽泛地讲,这个数可以不限于二进制,比如Byte,十六进制数0x12345678中,MSB可以指字节0x12,LSB可以指字节0x78。
其实,MSB和LSB就是用来陈述了一个数中的高位低位。
常见应用场合:
MSB和LSB最常见的使用,就是在数据传输中,用来约定数据传输的顺序。
比如通讯中说 MSB First 或 LSB First,就是在约定 the ordering of the sequence of the bits in the bytes sent over a wire in a transmission protocol or in a stream.
例如,接收方依次收到1-0-0-1-0-1-1-0,如果约定MSB,则为
同样
4000
地,我们也可以把这种方式拓展,拿来代指在一个多字节(multi-bytes)的数值中,哪个字节是最高字节,哪个字节是最低字节(byte)。在这种场合下,我们可以把MSB和LSB中的
那么变量
(在变量
2
1
2
方案二:
2
1
2
我们沿着地址增长的方向看下去,
方案一,首先看到的是
方案二,首先看到的是
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
目录(?)[+]
MSB&LSB与Endianness
参考资料
http://www.merriam-webster.com/dictionary/positional%20notationhttp://www.buczynski.com/Proteus/msblsb.html
https://en.wikipedia.org/wiki/Most_significant_bit
https://en.wikipedia.org/wiki/Least_significant_bit
https://en.wikipedia.org/wiki/Bit_numbering
https://support.microsoft.com/en-us/kb/130861
https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html
https://support.microsoft.com/en-us/kb/102025
https://en.wikipedia.org/wiki/Endianness
MSB和LSB
解释:
MSB = most significant bit 最高有效位,也称high-order bitLSB = least significant bit 最低有效位
由于我们普遍使用的记数方法一般都是Positional notation(位置记法),不同的位置其“权”不同。所以,一般地,MSB也可称做left-most bit,LSB也可称作right-most bit。
例如,数值150的二进制表示法:
1001 0110,即8-bit二进制数:
| 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | | bit7 | .. | .. | .. | .. | .. | .. | bit0 |1
2
1
2
这里,bit7就是MSB,bit0就是LSB.
通俗的说,就是在一个数值中,占比重最高的位即这个数的最高位叫MSB,占比重最低的位即这个数的最低位叫LSB。
严格地讲,MSB和LSB指二进制数的bit位。宽泛地讲,这个数可以不限于二进制,比如Byte,十六进制数0x12345678中,MSB可以指字节0x12,LSB可以指字节0x78。
其实,MSB和LSB就是用来陈述了一个数中的高位低位。
常见应用场合:
MSB和LSB最常见的使用,就是在数据传输中,用来约定数据传输的顺序。
比如通讯中说 MSB First 或 LSB First,就是在约定 the ordering of the sequence of the bits in the bytes sent over a wire in a transmission protocol or in a stream.
例如,接收方依次收到1-0-0-1-0-1-1-0,如果约定MSB,则为
b10010110==150,如果约定LSB,则为
b01101001==105.
MSB和LSB的扩展用途
MSB和LSB的基本意义,是用来指明一个二进制数值中的bit positions,即哪个是最高位、哪个是最低位(bit)。
同样
4000
地,我们也可以把这种方式拓展,拿来代指在一个多字节(multi-bytes)的数值中,哪个字节是最高字节,哪个字节是最低字节(byte)。在这种场合下,我们可以把MSB和LSB中的
B当做
Byte看待。
Endian
这里我们假定sizeof(int) == 4.
那么变量
int i = 0x12345678;的值在内存(memory)中是怎么放置的呢?
(在变量
i中,MSB就是
0x12,LSB就是
0x78)
两种存储方案:
方案一:| 12 | 34 | 56 | 78 | | addr+0 | addr+1 | addr+2 | addr+3 |1
2
1
2
方案二:
| 78 | 56 | 34 | 12 | | addr+0 | addr+1 | addr+2 | addr+3 |1
2
1
2
我们沿着地址增长的方向看下去,
方案一,首先看到的是
0x12即MSB,也就是说先看到一个数据中的占“大头”的部分,所以叫做 big endian。
方案二,首先看到的是
0x78即LSB,也就是说先看到一个数据中的占“小头”的部分,所以叫做 little endian。
endian的一个简单探测程序:
int i = 1; char *p = (char *)(&i); if (1 == p[0]) { printf("little endian\n"); } else { printf("big endian\n"); }1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
相关文章推荐
- MSB&LSB与Endianness
- MSB&LSB
- 安装RealPlayer 11时遇到错误:lsb >= 3.1 is needed by RealPlayer-11.0.0.4028-20080225.i586
- MSB与LSB
- C/C++语言,对MSB、LSB的读/取处理
- MSB与LSB
- MSB与LSB
- loongson & MySQL 如何处理 /etc/lsb-base-logging.sh: line 72: RUNLEVEL: unbound variable
- 深入了解MSB和LSB
- 大端小端与LSB和MSB的小故事
- MSB与LSB(转)
- MSB LSB转换处理
- MSB与LSB
- 关于MSB/LSB Big-Endian/Small-Endian的区别
- PCM 数据中的大/小端 与 MSB/LSB
- MSB and LSB
- MSB与LSB
- MSB/LSB 数据大小端
- LSB &ADC
- Fedora下安装Chrome出现lsb >= 3.2 is needed by google-chrome