MSB 和 LSB 在計(jì)算機(jī)中的意思并不唯一確定寝受,這邊分為兩種解釋:
- MSB : Most Significant Bit,LSB : Least Significant Bit
- MSB : Most Significant Byte,LSB : Least Significant Byte
但有一點(diǎn)可以確定的是:MS 往往代表是重要的膝昆,而 LS 則代表不重要的,比如 傳遞數(shù)據(jù) 1001 時(shí)贷腕,高位的數(shù)據(jù)單位是千惹苗,肯定比低位數(shù)據(jù)單位是個(gè)來的更加重要,所以往往丟失低位數(shù)據(jù)的影響要遠(yuǎn)遠(yuǎn)小于丟失高位數(shù)據(jù)规婆。
高低位
MSB 可以代表 Most Significant Bit澜躺,LSB 則代表 Least Significant Bit 根據(jù)具體的場(chǎng)景來判別蝉稳。在很多涉及到 SPI/IIC 通訊的芯片手冊(cè)中,如:FM25W256 鐵電或者 EEPROM 中掘鄙,描述的 MSB/LSB 根據(jù)時(shí)序圖往往可以判別代表的是高地位而不是字節(jié)耘戚。
一般而言,采用 Data is written MSB first 的方式會(huì)更好些操漠,如上面所敘述的那樣收津, MSB 代表的是重要位(Most Significant Bit,先傳遞重要位浊伙,能夠減少重要位被丟失的可能性撞秋,目前像 I2C,SPI等通訊協(xié)議都保留了設(shè)置先傳遞 MSB 還是先傳遞 LSB 的功能嚣鄙,但是絕大多數(shù)的廠家的芯片手冊(cè)都會(huì)注明Data is written MSB first吻贿。
但值得注意的是,uart 通訊中全部采用Data is written LSB first哑子,即先傳遞低位數(shù)據(jù)舅列,且芯片配置中是無法更改 uart 傳遞位的次序的,換言之卧蜓,uart 是一種較古老的通訊協(xié)議剧蹂,通訊中一定是從低位往高位傳遞數(shù)據(jù)。大家在使用時(shí)基本不需要考慮 MSB 和 LSB 的先寫入順序烦却,因?yàn)橐呀?jīng)固定死了宠叼,所有使用該設(shè)備的 232/485,上/下位機(jī)其爵,都必須遵守這個(gè)規(guī)則冒冬。
高低字節(jié)
MSB 可以代表 Most Significant Byte,LSB 則代表 Least Significant Byte 根據(jù)具體的場(chǎng)景來判別摩渺。一般在串口通訊場(chǎng)景中简烤, MSB 和 LSB 代表的是字節(jié)。
數(shù)據(jù)尋址時(shí)摇幻,一般讀取的都是低位字節(jié)的地址(即存儲(chǔ)數(shù)據(jù)的可能占用多個(gè)地址横侦,但低位地址代表了這個(gè)數(shù)據(jù)的存儲(chǔ)地址)。C 中的數(shù)據(jù)類型都是從內(nèi)存的低地址向高地址擴(kuò)展绰姻,取址運(yùn)算"&"都是取低地址枉侧。 所以就有高位地址和地位地址區(qū)別,一般來說數(shù)字大的就是高地址狂芋,數(shù)字小的是地址:比如 0x1000 相對(duì)于 0x1003 來說是低地址榨馁。數(shù)據(jù)低位和數(shù)據(jù)高位:比如 0x012345678 0x01 是數(shù)據(jù)高位(即使 Most Significant Byte,MSB 位)帜矾,而 0x78 是數(shù)據(jù)低地址位(Least Significant Byte翼虫,LSB)屑柔。
計(jì)算機(jī)中,究竟高字節(jié)先被存儲(chǔ)還是低字節(jié)先被存儲(chǔ)珍剑,以及傳輸過程中先發(fā)送高位字節(jié)還是低位字節(jié)這個(gè)往往取決于 CPU 的結(jié)構(gòu)掸宛,是大端小端問題,可以參考具體文章招拙。