由于字符是按其代碼(整數)形式存儲的,因此C99把字符型數據作為整數類型的一種。但是,字符型數據在使用上有自己的特點,為此本節單獨介紹。
1、字符與字符代碼
字符與字符代碼并不是任意寫一個字符,程序都能識别的。例如圓周率π在程序中是不能識别的,隻能使用系統的字符集中的字符,目前大多數系統采用ASCII字符集。各種字符集(包括ASCII字符集)的基本集都包括了127個字符。其中包括:
! " # & ' ( ) * , - . / : ; < = > ? [ \ ] ^ _ { | } ~
前已說明,字符是以整數形式(字符的ASCII代碼)存放在内存單元中的。例如:
可以看到,以上的字符的ASCII代号碼最多用7個二進制就可以表示。所以127個字符都可以用7個二進制表示(ASCII代碼為127時,二進制形式為1111111,7位全是1)。所以在C中,指定用1個字節(8位)存儲一個字符(所有系統都不例外)。此時,字節中的第1位置為0.
2、字符變量
字符變量是用類型符char定義字符變量。char是英文character(字符的所縮寫),見名即可知意。如:char c='?';定義c為字符型變量并使初值為字符'?'。'?'的ASCII代碼是63,系統把整數63賦給變量c。
c是字符變量,實質上是一個字節的整型變量,由于它常用來存放字符。所以稱為字符變量。可以把0~127之間的整數賦給一個字符變量。
在輸出字符變量的值時,可以選擇以十進制整數形式輸出,或以字符形式輸出。如:printf("%d %%c\n",c,c);輸出結果是:63 ?用“%d”格式輸出十進制整數63,用%c格式用字符形式輸出字符'?'.
字符型數據的存儲空間和值的範圍
說明:在使用有符号字符型變量時,允許存儲的值為-128~127,但字符的代碼不可能為負值,所以在存儲字符時實際上隻用到0~127這一部分,其第1位都是0.
如果将一個負整數賦給有符号字符型變量是合法的,但是它不代表一個字符,而作為一字節整型變量存儲負整數。如:signed char c = -6;
如果在定義變量時既不加signed,又不加unsigned,C标準并未規定是按signed char處理還是按unsigned char處理,由各編譯系統自己決定,這是和其他整型變量處理方式不同的,如int默認等同于signed int。
可以用以下方法測定本系統的處理方式:
char c = 255; //把一個128~255之間的正數賦給c
printf("%d\n",c); //按十進制形式輸出c的值
在Visual C 系統上進行編譯時,系統給出“警告”:“把一個整常數賦給char變量”。表示255已超過char變量的數值允許範圍,在運行時輸出-1.說明Visual C 是把char默認為signed char類型的。如果把第1行改為“unsigned char c=255;”,則不出現“警告”,且輸出255.
搜索微信公衆号【balayihuier】或掃描下方二維碼關注微信公衆号,資深軟件工程師帶你手把手撸代碼,從此走上人生巅峰,迎娶白富美!
公衆号《吧啦一會兒》,手把手帶你撸代碼
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!