下面三個定義式的區別:
int i = 1; char i = 1; char i = '1';
int用來定義整型變量,char用來定義字符型變量,要清楚的知道三個定義式的區別,可以比較它們在內存中的存儲形式。
數據在內存中是以二進制形式存放的,而且是以補碼表示的。一個正整數的補碼和該數的原碼(即該數的二進制形式)相同;如果數值是負的,求補碼的方法是:將該數的絕對值的二進制形式,按位取反再加1。
int i = 1,則內存中的存儲形式為:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
在討論字符型數據以前,首先要明確一個“編碼”的概念,即約定一套規則,將a、b、#等符號用二進制的形式表示出來,然后大家都遵守這個規則。美國信息交換標准碼(ASCII)就是基於這樣的目的產生的。那么我們現在來看下面兩個定義式:
char i = 1;
char i = '1';
將一個整型常量放到一個字符變量中,實際就是把以該整型常量表示的ASCII碼放到內存單元中。(ASCII碼是以十進制整數表示的)
將一個字符常量放到一個字符變量中,實際上並不是把該字符本身放到內存單元中去,而是把該字符的相應ASCII代碼放到存儲單元中。
char i = 1;則i的ASCII就是1,在內存中就是0 0 0 0 0 0 0 1
char i = ‘1’;則i的ASCII就是字符‘1’的ASCII碼49,就是0 0 1 1 0 0 0 1
上面是int和char的區別,它們的聯系就是存儲形式類似,就是一個是1個字節,一個是2個字節。int 可以用字符常量賦值,char也可以用整型常量賦值,它們之間的橋梁就是ASCII碼,因為字符是與ASCII一一對應的。
char能不能存中文字符
在C語言中,char類型占1一個字節,而漢子占2個字節,所以不能存儲。
在Java中,char類型占2個字節,而且Java默認采用Unicode編碼,以個Unicode碼是16位,所以一個Unicode碼占兩個字節,Java中無論漢子還是英文字母都是用Unicode編碼來表示的。所以,在Java中,char類型變量可以存儲一個中文漢字。
char a = 65535; char b = 65536;//報錯 Type mismatch: cannot convert from int to char