【车载开发系列】LSB与MSB的区别

【车载开发系列】LSB与MSB的区别

一. LSB(Least Significant Bit)

LSB是最低有效位。它代表二进制中最小的单位,可以用来指示数字很小的变化。
也就是说,LSB是一个二进制数字中的第0位(即最低位),具有权值为2^0,可以用来检测数的奇偶性。LSB为1则偶数,为0则是奇数。

二. MSB(Most Significant Bit)

MSB是最高有效位。它代表一个n位二进制数字中的n-1位,具有最高的权值2^(n-1)。
对于有符号的二进制数,负数采用反码或补码形式,此时MSB用来表示符号,
若MSB=1,则表示数据为负值,若MSB=0,则表示数据为正。

三. LSB与MSB举例

假设一个一字节的数0x9A转换成2进制为“1001 1010”,那么LSB与MSB则应该是这样分布的:
通常,一个芯片的管脚中,对于一个多比特的信号,比如32根的地址线,从低开始按0到31编个号。
MSB就是31,LSB就是0。那么如果标记为:ADDR[31:0]就是MSB first的方式。
如果标记为ADDR[0:31]就是LSB first的方式。LSB和MSB是以机器码为单位进行排序。
那么CPU存储一个字节的数据时,其字节内的8个比特之间的顺序是否也有big endian和little endian之分?
或者说是否有比特序的不同?实际上,这个比特序是同样存在的。

实际上,由于CPU存储数据操作的最小单位是一个字节,其内部的比特序是什么样对我们的程序来说是一个黑盒子。
也就是说,你给我一个指向0xB4这个数的指针,对于big endian方式的CPU来说,它是从左往右依次读取这个数的8个比特; 而对于little endian方式的CPU来说,则正好相反,是从右往左依次读取这个数的8个比特。而我们的程序通过这个指针访问后得到的数就是0xB4,字节内部的比特序对于程序来说是不可见的,其实这点对于单机上的字节序来说也是一样的。

假设little endian方式的CPU要传给big endian方式CPU一个字节的话,其本身在传输之前会在本地就读出这个8比特的数,然后再按照网络字节序的顺序来传输这8个比特,这样的话到了接收端不会出现任何问题。而假如要传输一个32比特的数的话,由于这个数在little endian方存储时占了4个字节,而网络传输是以字节为单位进行的,little endian方的CPU读出第一个字节后发送,实际上这个字节是原数的LSB,到了接收方反倒成了MSB从而发生混乱。

四. 区别

MSB与LSB是存在于二进制BIT中的计算机名词,MSB和LSB是以bit为单位,以机器码的方式进行排序;而大端和小端是以数据类型为单位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值