私は最近、C の「char」型は実際には整数の特殊な形式であるというステートメントに出くわしました。これは、文字と記号を表す ASCII コード番号を格納するものです。
これはどこまで有効ですか?これは別の疑問につながります - char 型は本当に C で整数として分類できますか?
はい、C ではchar
整数型と見なされます。最低 8 ビットが必要です。ストレージの 1 バイトと 1 バイトの同等性は、char
通常発生するだけでなく、かなり明確です。たとえば、(C99、§5.2.4.2.1/1):
number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT 8
したがって、a はchar
常に正確に 1 バイトを占有します。これは、最小で 8 ビットでなければなりません。それより大きい場合でも、正確に 1 バイトを占有しますが、そのバイトはたまたま 8 ビットよりも大きくなります。
ASCII コードの保持に関する限り、これは多くの場合正しいですが、必ずしもそうとは限りません。IBM メインフレームのようなものでは、おそらく代わりに EBCDIC コードを保持します。より一般的なマシンでは、「ASCII」は多かれ少なかれ偶発的に発生しますが、英語以外の文字をエンコードすると、実際には ASCII が格納されていないことがすぐにわかります。通常、ISO 8859/x、またはおそらく Unicode UTF-8 を格納しています。
char
型は C の整数型short
であり、int
、 、などの他の整数型と同じファミリにlong
属します。整数型は、整数型を記述するために使用されるエンコード ビット数まで整数値全体を格納できます。たとえば、ほとんどのプラットフォームでは、achar
は 8 ビットまたは 1 バイトであるため、最大 2^8 の異なる値を表すことができます。
はい、achar
は (通常) 1 バイトの整数です。コンパイラがそれを異なる方法で扱うことを知っていることを除いて、通常はASCII文字セマンティクスを使用します。多くのライブラリ/ヘッダーは、1 バイト整数を格納するための , にBYTE
すぎない型を定義しています。unsigned char