国产aaaa级全身裸体精油片_337p人体粉嫩久久久红粉影视_一区中文字幕在线观看_国产亚洲精品一区二区_欧美裸体男粗大1609_午夜亚洲激情电影av_黄色小说入口_日本精品久久久久中文字幕_少妇思春三a级_亚洲视频自拍偷拍

首頁 > 化工知識(shí) > 給你講個(gè)來自《格列佛游記》的計(jì)算機(jī)故事

給你講個(gè)來自《格列佛游記》的計(jì)算機(jī)故事

時(shí)間:2020-09-25 來源:方正智芯 瀏覽:

今天這篇文章,想跟大家分享一個(gè)計(jì)算機(jī)科學(xué)(PLC編程)的基礎(chǔ)知識(shí):即數(shù)據(jù)在內(nèi)存中的存放序列(字節(jié)序)的問題。沒看明白?詳細(xì)說明下:我們知道,“位”(bit)是計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)的最小單位,八個(gè)“位”組成一個(gè)字節(jié)(Byte),兩個(gè)字節(jié)組成一個(gè)“字”(Word),其中一個(gè)字節(jié)為該“字”的低字節(jié),另一個(gè)字節(jié)為該“字”的高字節(jié)。

好了,現(xiàn)在問題來了:當(dāng)我們把一個(gè)整數(shù)(比如十六進(jìn)制數(shù):0x0384)存放到一個(gè)“字”里的時(shí)候,可以有兩種存放方法:一種方法可以把“0x03”存放到低字節(jié),把“0x84”存放到高字節(jié);另一種方法正好相反:可以把“0x03”存放到高字節(jié),把“0x84”存放到低字節(jié)。

 

應(yīng)該使用哪種存放方式呢?這個(gè)問題,曾經(jīng)在計(jì)算機(jī)科學(xué)界引起巨大的爭(zhēng)論。1980年,英國計(jì)算機(jī)科學(xué)家丹尼·科恩(Danny Cohen發(fā)表了一篇題為“在圣戰(zhàn)中祈求和平(On Holy Wars and a Plea for Peace)”(注:北島李工譯)的論文。丹尼·科恩在論文中引述了英國作家喬納森·斯威夫特(Jonathan Swift)于1726出版的一部長(zhǎng)篇諷刺小說:格列佛游記(Gulliver's Travels中的一個(gè)故事。故事中小人國的臣民為水煮蛋應(yīng)該是從大的一端(Big-End)剝開還是小的一端(Little-End)剝開而爭(zhēng)論不休。主張從大的一端(Big-End)把水煮蛋剝開的人被稱為Big-Endian(大端),主張從小的一端(Little-End)把水煮蛋剝開的人被稱為L(zhǎng)ittle-Endian(小端)。

 

丹尼·科恩在論文中用這個(gè)故事進(jìn)行類比,并提出了最高權(quán)重位(Most Significant Bit,MSB)和最低權(quán)重位(Least Significant Bit,LSB)的概念。

所謂“最高權(quán)重位(MSB)”,是指二進(jìn)制數(shù)制中,位數(shù)最大的位。所謂“最低權(quán)重位(LSB”,是指二進(jìn)制數(shù)制中,位數(shù)最小的位。比如二進(jìn)制數(shù):1101,最左邊的“1”,能代表“2”的“3”次方;從左數(shù)第二個(gè)“1”,能代表“2”的“2”次方;而最右邊的“1”,代表“2”的“0”次方。可見最左邊的“1”權(quán)重最高,所以該位就是“最高權(quán)重位(MSB)”,最右邊的“1”權(quán)重最低,所以該位就是“最低權(quán)重位(LSB)”。

把“最高權(quán)重位(MSB)”存放到低字節(jié),把“最低權(quán)重位(LSB)”存放到高字節(jié),這種字節(jié)序,稱為“大端(Big-Endian)”字節(jié)序;相反,把“最低權(quán)重位(LSB)”存放到低字節(jié),把“最高權(quán)重位(MSB)”存放到高字節(jié),這種字節(jié)序,稱為“小端(Little-Endian)”字節(jié)序。

比如:要把十六進(jìn)制數(shù)0x01020304,存放到起始地址為0x100的地方。按照大端(Big-Endina)字節(jié)序存放的方式,會(huì)把0x01存放到起始地址0x100中,把0x04存放到地址0x103中;而如果按照小端(Little-Endian)字節(jié)序方式存放,會(huì)把0x01存放到地址0x103中,把0x04存放到地址0x100中,如下圖:

 

英特爾X86的微處理器使用的小端(Little-Endian)字節(jié)序,ARM系列單片機(jī)使用的是大端(Big-Endian)字節(jié)序。西門子S7系列PLC使用大端(Big-Endian)存放方式,比如:給DB801.DBW510賦值W#16#0384(即:0x0384),在線監(jiān)控發(fā)現(xiàn)DB801.DBB510的值為0x03,DB801.DBB511的值為0x84,可見存放方式為大端(Big-Endian)字節(jié)序。

網(wǎng)絡(luò)傳輸也存在字節(jié)序的問題,以太網(wǎng)使用大端(big-endian)字節(jié)序,串口通信(RS232)使用小端(little-endian)字節(jié)序。

好了,關(guān)于字節(jié)序就先聊到這里了。另外關(guān)于丹尼·科恩(Danny Cohen)那篇著名的論文,我Google到了英文原著,會(huì)稍加排版,放到官網(wǎng)本文的末尾,感興趣的可以下載來看看。

 

相關(guān)參考文章:

STEP7中如何用簡(jiǎn)潔的代碼獲取字符串的長(zhǎng)度

工業(yè)串口通信之甲方乙方

官網(wǎng)提供本文PDF版本下載

版權(quán):如無特殊注明,文章轉(zhuǎn)載自網(wǎng)絡(luò),侵權(quán)請(qǐng)聯(lián)系cnmhg168#163.com刪除!文件均為網(wǎng)友上傳,僅供研究和學(xué)習(xí)使用,務(wù)必24小時(shí)內(nèi)刪除。
相關(guān)推薦