青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

唐吉訶德

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  5 Posts :: 75 Stories :: 3 Comments :: 0 Trackbacks

常用鏈接

留言簿(2)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

1. 字符型(char)簡介

 

        字符型char)用于儲存字符(character),如英文字母或標點。嚴格來說,char 其實也是整數類型integer type),因為 char 類型儲存的實際上是整數,而不是字符。計算機使用特定的整數編碼來表示特定的字符。美國普遍使用的編碼是 ASCIIAmerican    Standard    Code   for    Information   Interchange  美國信息交換標準編碼)。例如:ASCII 使用 65 來代表大寫字母 A,因此存儲字母 A 實際上存儲的是整數65。注意:許多IBM大型機使用另一種編碼——EBCDICExtended Binary-Coded Decimal Interchange Code 擴充的二進制編碼的十進制交換碼);不同國家的計算機使用的編碼可能完全不同。

 

        ASCII 的范圍是 0 127,故而 7 位(bit)就足以表示全部 ASCIIchar 一般占用 8 位內存單元,表示ASCII綽綽有余。許多系統都提供擴展ASCIIExtended ASCII),并且所需空間仍然在 8 位以內。注意,不同的系統提供的擴展 ASCII 編碼方式可能有所不同!

 

        許多字符集超出了 8 位所能表示的范圍(例如漢字字符集),使用這種字符集作為基本字符集的系統中,char 可能是 16 位的,甚至可能是 32 位的。總之,C 保證 char 占用空間的大小足以儲存系統所用的基本字符集的編碼。C 語言定義一個字節(byte)的位數為 char 的位數,所以一個字節可能是 16 位,也可能是 32 位,而不僅僅限于 8 位。

 

 

2. 聲明字符型變量

 

        字符型變量的聲明方式和其它類型變量的聲明方式一樣:

 

              char good;

              char better, best;

 

以上代碼聲明了三個字符型變量:goodbetter,和 best

 

 

3. 字符常量與初始化

 

        我們可以使用以下語句來初始化字符型變量:

 

              char ch = 'A';

 

這個語句把 ch 的值初始化為 A 的編碼值。在這個語句中,'A' 字符常量C 語言中,使用單引號把字符引起來就構成字符常量。我們來看另外一個例子:

 

              char fail;         /* 聲明一個字符型變量        */

              fail = 'F';          /* 正確                      */

              fail = "F";       /* 錯!"F" 是字符串字面量      */

 

把字符用雙引號引起來構成字符串字面量,所以第三個語句是錯誤的。我們會在后續的教程中討論字符串,現在暫且把它放下。

 

        因為字符實質上是以數字的形式存儲的,所以我們可以直接使用數字來初始化字符變量,或者給字符變量賦值:

 

              char ch = 65; /* 不好的風格 */

 

ASCII 中,A 的編碼是 65,所以對于使用 ASCII 的系統來說,這個語句等同于 char ch = 'A';。使用非 ASCII 的系統中,65 代表的不一定是 A,而有可能是其它任何字符,所以使用數字來初始化字符變量,或者給字符變量賦值是一種不好的風格,因為移植性太差了!但是,使用字符常量(例如 'A')來初始化字符變量,或者給字符變量賦值,字符變量得到的一定是我們所期待的字符的編碼值。例如:

 

              char ch = 'A';

 

無論在使用任何編碼的系統中,ch 都能夠得到字符 A 所對應的編碼值。這是因為編譯器會自動把 'A' 轉化成 A 所對應的編碼值。因此,我們應該使用字符常量來初始化字符變量,或者給字符變量賦值;而不要用數字。

 

       有趣的是,C 使用 int 類型來處理字符常量,而不是 char 類型。例如,在使用32 int ASCII 系統中,以下代碼

 

              char ch = 'C';

 

'C' 的編碼值 67 被存儲于 32 位的內存單元中;不過 ch 仍然存儲于 8 位的內存單元中,只是它的值變成了 67。因此,我們可以定義形如 'good' 的古怪字符常量。因為每個字符的編碼值占用 8 位的內存單元,所以這個常量剛好可以存儲于 32 位的內存單元。然而,用這種字符常量初始化字符變量,或者給字符變量賦值的話,導致的結果是,字符變量只能得到字符常量的最后 8 位。也就是說,以下代碼

 

              char ch = 'good';

 

ch 得到的是 'd' 的值。

 

以后,在沒有特殊說明的情況下,我們討論的都是 ASCII

 

 

ASCII 表

 

ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符
0 NUL 32 (space) 64 @ 96 `
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36  $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 ' 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 ETB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 \ 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 ~
31 US 63 ? 95 _ 127 DEL

 
NUL  空字符 VT   垂直制表 SYN  同步
SOH  標題開始 FF   走紙控制 ETB  信息組傳送結束
STX  正文開始 CR   回車 CAN  作廢
ETX  正文結束 SO   移位輸出 EM   媒介結束 End of Medium
EOT  傳輸結束 SI   移位輸入 SUB  換置
ENQ  詢問字符 DLE  Data Link Escape ESC  Escape
ACK  確認 DC1  設備控制1 FS   文件分隔符
BEL  響鈴 DC2  設備控制2 GS   組分隔符
BS   退格 DC3  設備控制3 RS   記錄分隔符
HT   橫向制表 DC4  設備控制4 US   單元分隔符
LF   換行 NAK  否定 DEL  刪除

 

 

 

參考資料:C Primer Plus, 5th Edtion By Stephen Prata
          The C Programming Language 2e By K&R

本文版權歸 螞蟻的 C/C++ 標準編程 以及 作者 antigloss 共同所有,轉載請注明原作者和出處。謝謝。

 

不可打印字符(Nonprinting Characters

 

 

    有些 ASCII 字符是不可打印的。例如退格另起一行警報等。C 語言提供了兩種方法來表示這種不可打印字符

 

    第一種方法是使用 ASCII 編碼。例如,ASCII 編碼中,7 用于表示警報:

 

        char beep = 7;

 

    第二種方法是使用特殊符號序列,也就是所謂的轉義字符escape sequences。參見下表:

 

    轉義字符          含義

          \a           警報( Alert (ANSI C)

          \b            退格(Backspace

          \f            換頁(Form feed

          \n            換行(Newline

          \r            回車(Carriage return

          \t            水平制表符(Horizontal tab

          \v            垂直制表符(Vertical tab

          \\            反斜桿( Backslash (\)

          \'            單引號( Single quote (')

          \"            雙引號( Double quote (")

          \?            問號( Question mark (?)

          \0oo        八進制數( Octal value (o 代表一個八進制數字)

          \xhh        十六進制數( Hexadecimal value (h 代表一個十六進制數字)

 

給變量賦值的時候,轉義字符必須使用單引號引住。例如:

 

          char nl = '\n';

 

下面我們詳細學習每個轉移字符的含義。

 

    \a(警報)是 ANSI C89 添加的,用于產生可聽或者可視的警報。\a 產生的效果取決于硬件。一般來說,輸出 \a 會產生鳴響。但是在某些系統,輸出 \a 不會產生任何效果,或者僅僅顯示一個特殊字符。標準明確指出,\a 不應該改變當前活躍位置active position)。所謂活躍位置,是指顯示設備(顯示器、打字機、打印機等等)顯示下一個字符的位置。以顯示器為例,活躍位置就是指光標所處的位置,輸出 \a 不會導致光標移動位置。

 

\b\f\n\r\t,以及 \v 都是輸出設備控制符。退格符(\b)使當前行的活躍位置后退一個位置。換頁符(\f)使活躍位置跳到下一頁的開端。注:換頁符可用于控制打印機換頁,但不會導致 PC 機的顯示屏換頁。換行符(\n)使活躍位置跳到下一行的開端。回車符 ( \r ) 使活躍位置返回當前行的開端。水平制表符(\t)使活躍位置移動若干個位置(通常是8個)。垂直制表符(\v)使活躍位置換若干行。注:\v可用于控制打印機換若干行,但是不會導致PC機的顯示屏換行。

 

    \\\',以及 \" 使我們可以把 \' " 用作字符常量。如果要打印以下句子:

 

"\ is called 'backslash'."

 

我們需要使用如下語句:

 

printf("\"\\ is called \'backslash\'.\"");

 

或者

 

printf("\"\\ is called 'backslash'.\"");

 

注意,在字符串字面量中,無論寫 \' 還是 ',輸出都是一樣的。但是,在給字符變量賦值時,一定要寫 \'。例如:

 

char ch = ''';   /* 錯誤! */

char ch = '\'';   /* 正確。 */

 

 

    \0oo \xhh ASCII碼的兩種特殊表示形式。如果想用八進制ASCII碼表示字符,可以在八進制數前面加上 \ ,然后用單引號引起來。例如:

 

            beep = '\007';        /*  \007 代表 \a  */

 

打頭的那些0可以省略,也就是說,寫成 '\07' 或者 '\7' 都一樣。無論有沒有打頭的0 7 都會被當成八進制數處理。

 

    C89 開始,C提供了用十六進制表示字符常量的方法:在反斜桿后面寫一個 x ,然后再寫 1 3 個十六進制數字。例如:

 

            nl = '\xa';        /*  \xa 代表 \n  */

 

    注意:使用ASCII碼時,要注意區分數字數字字符。例如:字符4ASCII碼是52 '4' 代表字符 4 ,而不是數字4。此外,盡管 '\n' '\xa' '\a' '\007' 是等價的,但是我們應該盡可能使用 '\n' '\a' ,而不要用 '\xa' '\007' 。這是因為前者易懂、便于記憶,而且移植性更高。而后者只對使用ASCII碼的系統有效。

 

參考資料:C Primer 5th Edition

                    C99 標準

本文版權歸 螞蟻的 C/C++ 標準編程 以及 作者 antigloss 共同所有,轉載請注明原作者和出處。謝謝。
 

一、字符輸出

 

        printf 函數使用 %c 表示輸出字符。因為字符是以 1 字節整數的形式存取的,所以,如果使用 %d 的話,輸出的會是整數。例如:

 

/* 這個程序輸出字符以及字符的整數編碼 */

#include <stdio.h>

 

int main(void)

{

      char ch;

 

      printf("Please enter a character.\n");

      scanf("%c", &ch);   /* 由用戶輸入一個字符 */

      printf("The code for %c is %d.\n", ch, ch);

 

      return 0;

}

 

請各位自行編譯執行此程序,查看其執行結果。輸入字符后記得要按回車鍵。

 

        printf 函數輸出 ch 的值兩次,第一次以字符的形式輸出(因為格式限定符為 %c),第二次以十進制整數的形式輸出(因為格式限定符是 %d)。注意:格式限定符只是用于指定數據的輸出形式,而不是用來指定數據怎么存儲。

 

二、字符類型的符號

 

        某些編譯器中,char 默認是有符號的(signed)。對于這類型的編譯器來說,char 的表示范圍通常是 -128 127 。而另外一些編譯器中,char 默認是無符號的(unsigned)。對于這類型的編譯器來說,char 的表示范圍通常是 0 255 。一般來說,編譯器的使用說明會注明它默認把 char 當作有符號的還是無符號的。

 

        C89 開始,我們可以使用關鍵字 signed unsigned 來修飾 char 。這么一來,無論編譯器默認 char 是有符號的也好,無符號的也罷,我們都可以用 signed char 表示有符號 char ,也可以用 unsigned char 表示無符號 char

 

參考資料:C Primer 5th Edition

                    C99 標準

本文版權歸 螞蟻的 C/C++ 標準編程 以及 作者 antigloss 共同所有,轉載請注明原作者和出處。謝謝。

ANSI C 提供了3種字符類型,分別是char、signed char、unsigned char
char相當于signed char或者unsigned char,但是這取決于編譯器!
這三種字符類型都是按照1個字節存儲的,可以保存256個不同的值。
signed char取值范圍是 -128 到 127
unsigned char 取值范圍是 0 到 255

但是char究竟相當于signed char呢還是相當于unsigned char呢??
這就是char和int的不同之處!
int==signed int,但是char不能簡單以為==signed char

要確定char究竟等同什么要基于不同的編譯器做測試
大多數機器使用補碼來存儲整數,在這些機器中按照整數類型存儲的-1的所有位均是1
假設我的機器也是如此存儲,就能據此判斷char究竟是等于signed char還是unsigned char

程序如下:
[oracle@test c]$ vi test_char.c

#include <stdio.h>

int main()
{
    char a=-1;
    signed char b=-1;
    unsigned char c=-1;

    printf("a=%d,b=%d,c=%d",a,b,c);

    return 0;
}
posted on 2010-11-09 21:23 心羽 閱讀(1311) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产一区二区三区av电影| 韩国福利一区| 欧美有码视频| 亚洲自拍偷拍视频| 午夜精品久久久久久久99热浪潮| 一本大道av伊人久久综合| 亚洲精品一区二区三区99| 亚洲高清网站| 日韩午夜免费视频| 日韩一级大片在线| 亚洲色图综合久久| 欧美一区二区视频在线观看2020| 在线亚洲高清视频| 亚洲国产精品欧美一二99| 午夜精品亚洲| 亚洲精品视频免费| 一区视频在线| 亚洲高清网站| 国产精品地址| 国产亚洲欧美aaaa| 国产九色精品成人porny| 欧美网站大全在线观看| 女女同性精品视频| 日韩一区二区久久| 欧美一区二区免费观在线| 久久裸体视频| 亚洲福利视频一区| 国产精品99久久久久久久vr| 久久精品2019中文字幕| 欧美日韩国产精品一卡| 国产一区在线看| 亚洲调教视频在线观看| 卡一卡二国产精品| 亚洲在线免费| 欧美日韩一区三区| 亚洲裸体在线观看| 久久午夜电影网| 亚洲亚洲精品在线观看| 欧美美女bb生活片| 一区二区三区在线视频播放| 亚洲男女毛片无遮挡| 亚洲精品女av网站| 性色一区二区| 国产精品婷婷| 亚洲男人的天堂在线aⅴ视频| 亚洲国产精品一区二区第四页av| 欧美制服丝袜第一页| 国产精品高潮在线| 一区二区三区精品| 亚洲人成欧美中文字幕| 99精品欧美一区二区蜜桃免费| 国产精品高精视频免费| 99视频一区| 亚洲大片在线观看| 久久久免费精品| 在线欧美亚洲| 亚洲欧美日韩另类精品一区二区三区 | 国产日韩亚洲| 亚洲午夜一区二区三区| 亚洲国产另类久久久精品极度| 玖玖玖国产精品| 亚洲高清视频在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲欧美高清| 国产午夜精品久久久| 久久久xxx| 久久一区亚洲| 99精品视频免费| 日韩午夜高潮| 国产精品99一区二区| 午夜在线一区| 久久av资源网| 在线欧美福利| 亚洲人成网在线播放| 欧美日韩高清不卡| 亚洲一区二区三区国产| 亚洲愉拍自拍另类高清精品| 国产欧美综合一区二区三区| 欧美专区中文字幕| 久久久www| 99国产精品视频免费观看| 99视频+国产日韩欧美| 国产精品视频九色porn| 久久中文字幕一区| 欧美黄色aaaa| 欧美一区二区三区精品电影| 久久久久在线观看| 一区二区三区视频免费在线观看| 亚洲一区二区三区精品在线| 狠狠综合久久av一区二区老牛| 欧美va天堂在线| 国产精品久久国产精麻豆99网站| 久久久久久久综合色一本| 欧美精品久久99久久在免费线| 午夜激情一区| 免费视频久久| 欧美亚洲三区| 免费欧美网站| 久久久精品动漫| 欧美色精品天天在线观看视频| 久久成人在线| 欧美日在线观看| 欧美成人免费小视频| 国产精品久久久久久户外露出| 免费观看成人www动漫视频| 欧美性理论片在线观看片免费| 免费成人av在线看| 国产欧美欧洲在线观看| 亚洲国产一区二区在线| 国产自产在线视频一区| 国内精品嫩模av私拍在线观看| 91久久亚洲| 午夜精品视频网站| 一区二区三区免费看| 久久久久.com| 性感少妇一区| 欧美日韩一区二区免费在线观看| 榴莲视频成人在线观看| 国产精品理论片在线观看| 亚洲高清一二三区| 在线精品在线| 久久精品视频亚洲| 欧美在线1区| 国产精品成人一区二区三区夜夜夜 | 亚洲一区尤物| 欧美日韩精品在线视频| 欧美三级在线播放| 久久国内精品自在自线400部| 久久亚洲精品网站| 欧美在线免费观看| 99热免费精品在线观看| 欧美日韩直播| 亚洲综合国产精品| 亚洲在线中文字幕| 久久国产日韩| 久久综合九色欧美综合狠狠| 欧美亚洲视频在线看网址| 亚洲黑丝在线| 亚洲午夜激情| 欧美日韩在线大尺度| 最新69国产成人精品视频免费| 国内久久精品| 久久久久在线| 亚洲高清视频的网址| 日韩午夜激情电影| 欧美私人啪啪vps| 在线亚洲欧美视频| 欧美亚洲免费高清在线观看| 国产欧美在线观看一区| 欧美一区影院| 欧美 日韩 国产一区二区在线视频 | 国产伊人精品| 久久久免费观看视频| 亚洲大胆在线| 国产精品99久久不卡二区| 欧美午夜视频在线观看| 亚洲欧美日韩国产综合| 久久亚洲高清| 亚洲美女av电影| 国产精品欧美一区喷水| 欧美综合77777色婷婷| 亚洲激情视频在线| 国产在线精品自拍| 久久精品人人做人人爽| 亚洲福利视频一区| 一区二区在线免费观看| 欧美国产在线观看| 午夜精品国产| 亚洲激情综合| 久久成人这里只有精品| 亚洲国语精品自产拍在线观看| 欧美日韩国产不卡在线看| 亚洲综合成人在线| 亚洲国产精品t66y| 欧美在线关看| 日韩午夜av| 在线观看日韩| 国产农村妇女精品一区二区| 欧美xart系列在线观看| 亚洲欧美另类在线观看| 亚洲国内自拍| 蜜臀久久99精品久久久久久9| 亚洲视频一区在线| 亚洲国产婷婷综合在线精品| 国产精品日日摸夜夜摸av| 欧美电影在线观看| 久久高清国产| 亚洲自拍偷拍福利| 亚洲欧洲三级电影| 美国十次成人| 久久电影一区| 亚洲综合久久久久| 日韩视频一区二区| 在线观看亚洲精品| 国产午夜精品一区二区三区欧美 | 国产日韩精品一区观看 | 国产精品高清一区二区三区| 欧美插天视频在线播放| 欧美中文日韩| 久久爱另类一区二区小说|