以前在学汇编的时候,一直不知道老师在换行时,总会打一个换行符和回车符,原来他们还有这么一个故事....
在很久以前,有一种叫做电传打字机(Teletype Model 33 ASR) 的机器,那时候还没有计算机这种玩意。在这种打字机上,有一个叫Carriage的部件,它是打字头,相当于打字机的光标。每输入一个字符,光标就会前进一格。当输入的字符满一行后,光标重新从下一行的最左边开始打印。
这个时候会触发两个动作,一个是把光标在垂直方向上向下移,一个是在水平方向上把光标移动到最左边。然后这种打字机每秒可以打10个字符,相当于0.1秒打一个字符;而要完成这两个动作需要花费0.2秒的时间,如果在这0.2秒中,有新的字符传过来的话,那么这些字符将会丢失。
为了解决这个字符丢失的问题,研制人员就在每行的后面添加了两个表示一行结束的字符:一个叫回车(carriage return),相当于告诉打字机,把光标在水平方向上移到最左边;一个叫换行(line feed),相当于告诉打字机,在垂直方向上把光标移动到下一行。
这就是回车和换行的由来。
后来,计算机出现了,这两个概念也被拿了过来。但是那时候储存设备非常昂贵,一些人认为用两个字符用来表示一行的结尾非常浪费,于是产生了分支,不同的厂商有不同的处理方法。
在这些操作系统中,Unix操作系统每行结尾只有换行,即"\n";Windows则是回车+换行,即“\r\n”;而Mac系统里则使用回车来代表结尾,即“\r”。
正是这个原因,才会导致我们有时用Windows系统来打开Unix/Mac系统的文件时,会出现所有文字变成一行的情况,而用Unix和Mac系统打开Windows系统的文件时,在每一行的结尾会多出一个 ^M 的字符。
完
关注公我的众号:苦逼的码农,获取更多原创文章,后台回复礼包送你一份特别的资源大礼包。