60/70 MSB 和 LSB

MSB 和 LSB 在计算机中的意思并不唯一确定,这边分为两种解释:

  • MSB : Most Significant Bit,LSB : Least Significant Bit
  • MSB : Most Significant Byte,LSB : Least Significant Byte

但有一点可以确定的是:MS 往往代表是重要的,而 LS 则代表不重要的,比如 传递数据 1001 时,高位的数据单位是千,肯定比低位数据单位是个来的更加重要,所以往往丢失低位数据的影响要远远小于丢失高位数据。

高低位

MSB 可以代表 Most Significant Bit,LSB 则代表 Least Significant Bit 根据具体的场景来判别。在很多涉及到 SPI/IIC 通讯的芯片手册中,如:FM25W256 铁电或者 EEPROM 中,描述的 MSB/LSB 根据时序图往往可以判别代表的是高地位而不是字节。

一般而言,采用 Data is written MSB first 的方式会更好些,如上面所叙述的那样, MSB 代表的是重要位(Most Significant Bit,先传递重要位,能够减少重要位被丢失的可能性,目前像 I2C,SPI等通讯协议都保留了设置先传递 MSB 还是先传递 LSB 的功能,但是绝大多数的厂家的芯片手册都会注明Data is written MSB first

但值得注意的是,uart 通讯中全部采用Data is written LSB first,即先传递低位数据,且芯片配置中是无法更改 uart 传递位的次序的,换言之,uart 是一种较古老的通讯协议,通讯中一定是从低位往高位传递数据。大家在使用时基本不需要考虑 MSB 和 LSB 的先写入顺序,因为已经固定死了,所有使用该设备的 232/485,上/下位机,都必须遵守这个规则。

高低字节

MSB 可以代表 Most Significant Byte,LSB 则代表 Least Significant Byte 根据具体的场景来判别。一般在串口通讯场景中, MSB 和 LSB 代表的是字节。

数据寻址时,一般读取的都是低位字节的地址(即存储数据的可能占用多个地址,但低位地址代表了这个数据的存储地址)。C 中的数据类型都是从内存的低地址向高地址扩展,取址运算"&"都是取低地址。 所以就有高位地址和地位地址区别,一般来说数字大的就是高地址,数字小的是地址:比如 0x1000 相对于 0x1003 来说是低地址。数据低位和数据高位:比如 0x012345678 0x01 是数据高位(即使 Most Significant Byte,MSB 位),而 0x78 是数据低地址位(Least Significant Byte,LSB)。

计算机中,究竟高字节先被存储还是低字节先被存储,以及传输过程中先发送高位字节还是低位字节这个往往取决于 CPU 的结构,是大端小端问题,可以参考具体文章。

推荐阅读更多精彩内容