Cの符号付き文字と符号なし文字の必要性は何ですか?
Cでsignedおよびunsignedcharを使用する特別な理由はありますか?または、コンパイラが符号付き/符号なし修飾子を追加する前にデータ型をチェックする必要がないように、完全を期すために単に追加されたのでしょうか。
符号付き変数と符号なし変数については質問していません。私の疑問は、符号なし文字変数では不十分で、符号付き文字変数に依存しなければならないという特殊なケースについてです。
Cの符号付き文字と符号なし文字の必要性は何ですか?
Cでsignedおよびunsignedcharを使用する特別な理由はありますか?または、コンパイラが符号付き/符号なし修飾子を追加する前にデータ型をチェックする必要がないように、完全を期すために単に追加されたのでしょうか。
符号付き変数と符号なし変数については質問していません。私の疑問は、符号なし文字変数では不十分で、符号付き文字変数に依存しなければならないという特殊なケースについてです。
Achar
は、基盤となるハードウェアにとって最も効率的なものに応じて、符号付きまたは符号なしのいずれかになります。キーワードsigned
とunsigned
あなたが何か他のものが欲しいことを明示的に指定することを可能にします。
C99の理論的根拠からの引用:
、プレーン、およびの3つのタイプ
char
が指定されています。プレーンは、以前の慣例のように、実装に応じて署名付きまたは署名なしのいずれかとして表すことができます。この型はC89で導入され、プレーンとして実装されたシステムで1バイトの符号付き整数型を使用できるようにしました。対称性の理由から、キーワードは他の整数型の型名の一部として許可されています。signed
unsigned
char
signed char
char
unsigned char
signed
情報#1: Cは、8ビットを使用char
する小さなものです。int
情報#2:signed
との違いはunsigned
、表現の1ビットがsigned
変数の符号ビットとして使用されることです。
情報#3:(#2)の結果として、変数は(0から255の場合)とsigned
は異なる範囲(-128から127のchar
場合)を保持します。unsigned
char
QA#1:なぜ必要なのunsigned
ですか?
ほとんどの場合(たとえば、ポインターを表す)、符号付き変数は必要ありません。慣例により、メモリ内のすべての場所は、符号なしアドレスの連続した配列としてプログラムに公開されます。
QA#2:なぜ必要なのsigned
ですか?
一般的に、符号付き算術を実行します。
文字ではなく数字を保持するためにcharを使用していると思います。
それで:
符号付き文字は、少なくとも-128から127の範囲を提供します。unsigned charは、少なくとも0から255の範囲を提供します。
文字は標準で少なくとも8ビットである必要があるので、少なくとも私の言う理由です。これらの値が大きくなる可能性があります。
とにかく、あなたの質問に答えるために、charをunsignedとして持つと、最初のビットが'sign'ビットである必要がなくなり、signedcharのほぼ2倍を保持できるようになります。
理解しなければならないのは、データ型「char」は実際には単なる整数であり、通常は8ビット幅であるということです。値の制限を尊重することを前提として、他のデータ型間と同じように使用できます。「char」を文字に制限する理由はありません。
32/64ビットプロセッサでは、通常、このような小さな整数フィールドを使用する必要はありませんが、8051などの8ビットプロセッサでは、8ビット整数の処理がはるかに高速で使用量が少ない(制限付き)だけではありません。メモリー。