回车与换行的故事

简介: 以前在学汇编的时候,一直不知道老师在换行时,总会打一个换行符和回车符,原来他们还有这么一个故事....在很久以前,有一种叫做电传打字机(Teletype Model 33 ASR) 的机器,那时候还没有计算机这种玩意。

以前在学汇编的时候,一直不知道老师在换行时,总会打一个换行符回车符,原来他们还有这么一个故事....

在很久以前,有一种叫做电传打字机(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 的字符。

关注公我的众号:苦逼的码农,获取更多原创文章,后台回复礼包送你一份特别的资源大礼包。

目录
相关文章
|
7月前
VSCode将某个字符替换为换行符并换行显示
VSCode将某个字符替换为换行符并换行显示
565 1
VSCode将某个字符替换为换行符并换行显示
|
7月前
|
缓存 网络协议 前端开发
终极解密输入网址按回车到底发生了什么
终极解密输入网址按回车到底发生了什么
67 1
c遇回车空格需谨慎--再记忆
为什么说再记忆呢...因为以前发过对scanf的探究.. [button href="https://dyedd.cn/730.html"]历史[/button] 对于字符来说,这样的输入不需要空格!
36 0
|
小程序
小程序换行
小程序换行
173 0
|
Unix C语言 C++
正确理解回车与换行
回车 \r 本义是光标重新回到本行开头 换行 \n 本义是光标往下一行(不一定到下一行行首)
184 0
|
Python
LeetCode 1974. 使用特殊打字机键入单词的最少时间
有一个特殊打字机,它由一个 圆盘 和一个 指针 组成, 圆盘上标有小写英文字母 'a' 到 'z'。只有 当指针指向某个字母时,它才能被键入。指针 初始时 指向字符 'a' 。
108 0
|
开发工具 Android开发
粘贴到vi/vim的代码,怎样避免向右不断缩进,保持原来的格式?解决vi/vim在粘贴中会在行首多很多缩进和空格的问题。
SecureCRT会将你原来的文本原封不动的按照字符串的样式发送给服务器。所以当你的服务器上的vi/vim设置为autoindent的话,在 i 模式下,那么它会将SecureCRT传输而来的这些字符串再进行一下缩进。
1902 0
|
编解码 PHP 数据库