char

読み:チャー
読み:キャラ
外語:char 英語
品詞:名詞

C/C++/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で表現される。

用語の所属
整数型
C
C++
Java
関連する用語
wchar_t
汎整数拡張

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club