char
読み:チャー
外語:char
C
/
C++
/
Java
の
予約語
の一つ。
目次
由来
特徴
C/C++
仕様
printf
マクロ定数
typedef
Java
由来
本来は8ビット以下の符号化文字集合しか考慮していない時代のCにおいて、一つの文字を表現する型であった。
つまり、文字→character→char、というのが、そもそもの由来である。
が、今の時代にそのような無知は通用しない(ことになっている)。
特徴
C/C++
仕様
C/C++
では最低でも8ビット以上のビット幅を持つ整数型を意味するが、符号付きか符号なしかは処理系に依存する。
すべての環境を調査したわけではないが、
GCC
は符号無しの
unsigned char
となる実装が多いようであり、Microsoft C/C++では符号ありのsigned charである。
なお、if文などの処理においては
汎整数拡張
の対象となっているため、使用には注意を要する。
printf
printf
のフォーマット文字列は、標準的には%hhdなどを用いるが、
C99
以降でしか対応しない。
一般的には、unsigned intと同様に
%d
が使われる。
マクロ定数
パーソナルコンピューター
では一般に8ビット長だが、DEC PDP-10、IBM 7090、ACOS-6の動作するNECのメインフレームなど、36ビットワードマシンでは1バイトが9ビットであり、charも9ビット長となっている。
ANSI Cの時代より、limits.hにおいて以下の6個のマクロ定数が定義されるようになった。これを利用すると、その環境での長さを得ることができる。
CHAR_BIT
char型のビット長 (例えば8)
CHAR_MIN
char型の最小値 (例えば-128)
CHAR_MAX
char型の最大値 (例えば127)
SCHAR_MIN
signed char型の最小値 (例えば-128)
SCHAR_MAX
signed char型の最大値 (例えば127)
UCHAR_MAX
unsigned char型の最大値 (例えば255)
typedef
ISO Cには、次のtypedefが存在する。
typedef
unsigned char
int8_t
;
Windowsでは、次のtypedefが存在する。
typedef char CHAR;
Java
Javaは、文字を
Unicode
で表わす。charは符号なし16ビット整数型である。
Cにおけるcharと同等の予約語は、Javaでは
byte
となる。
JavaはUnicodeの符号化として
UCS-2
を想定しており、このためcharは16ビットである。結果として、UnicodeのコードポイントU+0000からU+FFFFまでを扱うことができた。
しかし、
Unicode 2.0
から
サロゲートペア
の仕様が盛り込まれ、
Unicode 3.1
からは実際の文字の割り当てが始まった。結果、UnicodeではU+10FFFFまでのコードポイントが扱われる。
Javaの5.0以降、Javaも
Unicode 4.0.0
をサポートし、これに伴いサロゲート領域の文字も扱えるようになった。サロゲート領域の文字は、2個のcharで表現される。
再検索