以前在學(xué)匯編的時候丧叽,一直不知道老師在換行時,總會打一個換行符和回車符公你,原來他們還有這么一個故事....
在很久以前踊淳,有一種叫做電傳打字機(jī)(Teletype Model 33 ASR) 的機(jī)器,那時候還沒有計算機(jī)這種玩意陕靠。在這種打字機(jī)上迂尝,有一個叫Carriage的部件,它是打字頭剪芥,相當(dāng)于打字機(jī)的光標(biāo)垄开。每輸入一個字符,光標(biāo)就會前進(jìn)一格税肪。當(dāng)輸入的字符滿一行后溉躲,光標(biāo)重新從下一行的最左邊開始打印虚吟。
這個時候會觸發(fā)兩個動作,一個是把光標(biāo)在垂直方向上向下移签财,一個是在水平方向上把光標(biāo)移動到最左邊串慰。然后這種打字機(jī)每秒可以打10個字符,相當(dāng)于0.1秒打一個字符唱蒸;而要完成這兩個動作需要花費(fèi)0.2秒的時間邦鲫,如果在這0.2秒中,有新的字符傳過來的話神汹,那么這些字符將會丟失庆捺。
為了解決這個字符丟失的問題,研制人員就在每行的后面添加了兩個表示一行結(jié)束的字符:一個叫回車(carriage return)屁魏,相當(dāng)于告訴打字機(jī)滔以,把光標(biāo)在水平方向上移到最左邊;一個叫換行(line feed)氓拼,相當(dāng)于告訴打字機(jī)你画,在垂直方向上把光標(biāo)移動到下一行。
這就是回車和換行的由來桃漾。
后來坏匪,計算機(jī)出現(xiàn)了,這兩個概念也被拿了過來撬统。但是那時候儲存設(shè)備非常昂貴适滓,一些人認(rèn)為用兩個字符用來表示一行的結(jié)尾非常浪費(fèi),于是產(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ù)「禮包」送你一份特別的資源大禮包廉邑。