unsigned char
読み:アンサインド-チャー
外語:unsigned char

 C/C++などで、「符号なしの文字型」を示す。
目次

特徴

C/C++

仕様
 unsignedcharはそれぞれが予約語であり、この組み合わせである。
 変数の長さ自体はcharと同じであるが、符号ビット分の1ビットが無いため、有効数値ビット数が1ビット分長くなる。代わりに0と正の数しか利用できない。
 Cの標準関数で、文字を扱うものは基本的にcharである。主要な実装では、GCCは符号無しのunsigned charとなる実装が多いようだが、Microsoft C/C++では符号ありのsigned charである。

printf
 printfのフォーマット文字列は、標準的には%hhuなどを用いるが、C99以降でしか対応しない。
 一般的には、unsigned intと同様に%uが使われる。

マクロ定数
 パーソナルコンピューターでは一般に8ビット長だが、DEC PDP-10、IBM 7090、ACOS-6の動作するNECのメインフレームなど、36ビットワードマシンでは1バイトが9ビットであり、charも9ビット長となっている。
 ANSI Cの時代より、limits.hにおいて以下のマクロ定数が定義されるようになった。これを利用すると、その環境での長さを得ることができる。
UCHAR_MAX
unsigned char型の最大値 (例えば255)
CHAR_BIT
char型のビット長 (例えば8)
CHAR_MIN
char型の最小値 (例えば-128)
CHAR_MAX
char型の最大値 (例えば127)

typedef
 ISO Cには、次のtypedefが存在する。
 typedef unsigned char u_int8_t;
 System V等古い実装では、次のtypedefが存在する。
 typedef unsigned char unchar;
 BSD系を中心に、次のtypedefが存在する。POSIX準拠の実装(_POSIX_SOURCE定義)では使用できない。
 typedef unsigned char u_char;
 Windowsでは、次のtypedefが存在する。
 typedef unsigned char BYTE;
 typedef unsigned char UCHAR;

Java
 Javaにはunsigned charは存在しない。
 Javaのcharは常に符号なしの16ビット長である。unsigned char相当であるとはいえるが、Javaの場合はcharにsigned/unsignedの指定をすることはできない。
 なお、Cにおけるcharと同等の予約語は、Javaではbyteとなる。

再検索