以前在學(xué)匯編的時候,一直不知道老師在換行時,總會打一個換行符和回車符,原來他們還有這么一個故事....
在很久以前,有一種叫做電傳打字機(Teletype Model 33 ASR) 的機器,那時候還沒有計算機這種玩意。在這種打字機上,有一個叫Carriage的部件,它是打字頭,相當(dāng)于打字機的光標(biāo)。每輸入一個字符,光標(biāo)就會前進(jìn)一格。當(dāng)輸入的字符滿一行后,光標(biāo)重新從下一行的最左邊開始打印。
這個時候會觸發(fā)兩個動作,一個是把光標(biāo)在垂直方向上向下移,一個是在水平方向上把光標(biāo)移動到最左邊。然后這種打字機每秒可以打10個字符,相當(dāng)于0.1秒打一個字符;而要完成這兩個動作需要花費0.2秒的時間,如果在這0.2秒中,有新的字符傳過來的話,那么這些字符將會丟失。
為了解決這個字符丟失的問題,研制人員就在每行的后面添加了兩個表示一行結(jié)束的字符:一個叫回車(carriage return),相當(dāng)于告訴打字機,把光標(biāo)在水平方向上移到最左邊;一個叫換行(line feed),相當(dāng)于告訴打字機,在垂直方向上把光標(biāo)移動到下一行。
這就是回車和換行的由來。
后來,計算機出現(xiàn)了,這兩個概念也被拿了過來。但是那時候儲存設(shè)備非常昂貴,一些人認(rèn)為用兩個字符用來表示一行的結(jié)尾非常浪費,于是產(chǎn)生了分支,不同的廠商有不同的處理方法。
在這些操作系統(tǒng)中,Unix操作系統(tǒng)每行結(jié)尾只有換行,即"\n";Windows則是回車+換行,即“\r\n”;而Mac系統(tǒng)里則使用回車來代表結(jié)尾,即“\r”。
正是這個原因,才會導(dǎo)致我們有時用Windows系統(tǒng)來打開Unix/Mac系統(tǒng)的文件時,會出現(xiàn)所有文字變成一行的情況,而用Unix和Mac系統(tǒng)打開Windows系統(tǒng)的文件時,在每一行的結(jié)尾會多出一個 ^M 的字符。
完
關(guān)注公我的眾號:苦逼的碼農(nóng),獲取更多原創(chuàng)文章,后臺回復(fù)「禮包」送你一份特別的資源大禮包。