3 種類の文字型
文字定数の概要:インデックス への移動
C においては,'A'
, '\t'
,'\007'
などの 1 文字定数も,int 値として表現されます。このとき,低位バイトは高位ビットに符号拡張されます。すなわち,その値が 127
(10
進)を超える場合,上位ビットは -1
(=0xFF
) になります。char 型のデフォルトを unsigned とすれば,符号拡張は行われなくなります。
3 種類の文字型,char,signed char,および unsigned char は 8 ビット(1 バイト)の記憶領域を必要とします。デフォルトでは,コンパイラは文字宣言を signed として扱います。文字宣言を unsigned として扱うには -K コンパイラオプションを使用します。C プログラムの動作は,この 3 種類の文字型には影響を受けません。
C++ プログラムでは,char 型,signed char 型,あるいは unsigned char 型の引数を使って関数をオーバーロードできます。たとえば,以下の関数プロトタイプは有効で異なるものです。
void func(char ch); void func(signed char ch); void func(unsigned char ch);
上記のうち,1 つのプロトタイプしか存在しない場合でも,任意の 3 種類の文字型を受け取れます。たとえば,次のようなコードは有効です。
void func(unsigned char ch); void main(void) { signed char ch = 'x'; func(ch); }