q: 何為"回車", 何為"換行"?
a: 回車的英文是"carriage return", 換行為「new line」 or "line feed".
回車的概念從計算機終端的角度不太容易理解, 回溯到早期電傳打字機, 回車是為了把「打字」部件拉回當前行開始. 看過醫院或者銀行小型機械印表機,多行文字打字頭會不斷拉回到開頭, 就可以理解成會發生多次回車.
換行並不是"打字"部件移動到下一行,打字部件一般是硬體固定的,而是滾筒上捲一行, 看起來像是一行被吃掉了, 所以被叫做line feed.
到計算機終端顯示時代,回車的概念開始弱化, 換行 new line更被大家所熟悉和理解.
q: 為什麼回車換行的表示形式有很多種, 比如\n, \r\n, \r?
a: 計算機的儲存一開始是很昂貴的, 一些科學家認為每行結尾兩個字元太浪費了,乙個就足夠。於是,分歧出現了.
可以參考:
比如linux用'\n', windows用"\r\n", mac classic用'\r'(mac最新也用'\n').
這就可以解釋為什麼在不同平台互相開啟文字檔案可能出現結尾亂碼或者多行被合併的問題.
q: 在使用的平台上實際驗證使用的是'r'還是'\n'.
a: 可以通過dump文字檔案的二進位制形式來確認, 檔案1如下.
二進位制形式如下:
可以看到兩行的間隔是'\n'.
q: 回車'\r'在終端顯示還有意義嗎?
a: 是有的! 在某些會不斷重新整理同一行資料的情形, '\r'大有可為.
如下,我們構造用\r覆蓋開頭資料的場景.
echo -en '1\r2\n3' > 123
注: 引數「-e」為處理特殊字元.
二進位制:
文字顯示:
最開始的1已經被後面的2覆蓋了.
如下是從0顯示到9, 間隔是1秒,每次都會覆蓋之前的顯示,到9後重置為0.
carriage.c:
q: 有沒有自動轉換'r', '\n'和"\r'n"的工具?#include #include #include void carriage()
}int main(int argc, char *ar**)
a: unix2dos和dos2unix工具可以實現'\n'和"\r\n"互轉.
主要就是替換字元, 有實現一版unix2dos, **位於:
環境: macos 10.14.5
溢位 你想知道的C語言 3 7
q 溢位的本質是什麼?a 江河漫漫,才華會溢,箱子會滿,人會吃飽。無止境增加一定會滿,事物的有限性,物質和慾望增長一定會撐不住。q n位元組無符號整形最大值再加1會變成什麼?a 思考1位元組的情形 unsigned char c uchar max printf d n unsigned char ...
精確度 你想知道的C語言 3 8
q 只要涉及到浮點數,每本書基本都會說它不是精確的,我們該如何理解精確二字?a 精確永遠都是相對而言。當我們認為1 2 3.自然數是精確的,自然c語言中int char都是精確的。如果我們認為1.33是精確的,那麼它就是精確的。那為什麼浮點數會被認為不是精確的呢?以4位元組浮點數為例,符號位 指數字...
整數的內部形態 你想知道的C語言 3 4
q 整數的內部形態有何意義?a 整數的二進位制形態對於理解計算機處理的位元資訊有重要意義,對於分析和擴充套件新型別以及解釋牛鬼蛇神 的資料操作有不可替代的支撐作用。q int i 100 i內部儲存的二進位制形式是什麼?a xi chen 511272827 qq.com cxsjabcabc in...