2013-10-04 116 views
3

有人可以向我解釋這個問題嗎?我不明白這本書是如何達到它的價值的,或者是如何得出答案的。使用十六進制,十進制和十進制值在C中寫轉義序列?

這裏是這樣的問題:

假設ch是一種char變量。顯示如何使用轉義序列,十進制值,八進制字符常量和十六進制字符常量將回車符分配給ch。 (假設ASCII代碼值。)

下面是答案:

通過使用分配的回車字符來ch

一個)轉義序列:ch='\r';
b)中的小數值:ch=13;
c)八進制字符常量:ch='\015';
d)十六進制字符常量:ch='\xd';

我明白a部分的答案,但是對於b,c和d部分完全失去了意義。你可以解釋嗎?

回答

3
計算機

表示使用字符encondings字符,例如ASCII ,utf-8,utf-16,iso-8859(http://en.wikipedia.org/wiki/ISO/IEC_8859-1)以及其他。早期計算機使用回車字符作爲打印機指令將打印頭返回到最左邊的位置。並且換行字符被用來將紙張索引到一個新行(因此爲什麼DOS使用CRLF作爲行,它使用點陣打印機效果更好)。無論如何,根據您的語言,CR字符在內部作爲數字值存儲在單個8位字節/八位字節或16位一對兩字節/八位字節中。

常見的ascii字符集在這裏找到:http://www.asciitable.com/,你可以發現CR,'\ r',13,0xD等等對於相同的值是不同的表示。

字符串只是以字符數組的形式存儲的字符序列,在末尾有一個標記(終止符),或者存儲當前字符串長度的計數。

+1

Ohhhh!現在有道理!我想我必須找到'r'的ascii代碼,所以我會找到'\#'的數字部分。現在我看到「\ r」是整個數字,斜槓包含在一個字符中,並帶有獨立的ascii代碼!非常感謝您的幫助!我曾經迷失......現在我被發現:) –

3

來自維基:

計算機和通信設備表示使用 字符編碼每個字符分配給一些字符 - 通過比特序列,典型地表示的 整數數量 - 即 可以存儲或通過網絡傳輸。通常的 編碼的兩個例子是ASCII碼和Unicode的UTF-8編碼。

對於您的問題b,c,d - 所有值均爲13(十進制)。運行以下代碼以瞭解發生了什麼:

char ch1='\r'; 
printf("Ascii value of carriage return is %d", ch1); 
+0

謝謝你的幫助! :D –

3

解釋答案b-d有兩個部分。

  1. 你需要知道,「回車」或CR(也稱爲CONTROL-M)的ASCII碼點是13.可以發現,從各種來源。它可能並不是顯而易見的,Unicode標準是其中一個地方(但它是),U + 000D是CARRIAGE RETURN(CR)。 Unicode代碼點U + 0000..U + 007F與ASCII相同; Unicode代碼點U + 0000..U + 00FF與ISO 8859-1(拉丁文1)相同。

  2. 您需要知道C分配給字符時可以使用十進制數或八進制或十六進制轉義符。符號如'\15''\015'是八進制字符常數,和八進制15是十進制13.符號如'\xD''\x0D'(或者,實際上,'\x0000000000000D'和所有停止途中)是hexedecimal常數和六角d也是十進制13。(請注意,八進制轉義限1-3位,但六角逃逸是並不限於此,但值大於'\xFF'較大通常具有實現定義的表示。)

相關問題