web-dev-qa-db-ja.com

charがC言語で1バイトである理由

Cでchar1バイトが長いのはなぜですか?なぜ2バイトまたは4バイト長ではないのですか?

1バイトとして保持するための背後にある基本的なロジックは何ですか?私はJava a char is 2 bytes long。で知っています。同じ質問です。

10
daniyalahmad

charは標準でそのように指定されているため、Cでは1バイトです。

最も可能性の高いロジックは次のとおりです。 char(標準文字セット)の(バイナリ)表現は1バイト。 Cが最初に開発されたとき、最も一般的に利用可能な標準は、それぞれ7ビットと8ビットのエンコーディングを必要とするASCIIEBCDICでした。そう、 1 byte was文字セット全体を表すのに十分です。

OTOH、Javaが登場する間、拡張文字セットとunicodeの概念が存在しました。したがって、future-proofになり、拡張性をサポートするために、char2 bytes、これは拡張文字セット値を処理できます。

23
Sourav Ghosh

charが1バイトを超えるのはなぜですか? charは通常、ASCII文字を表します。ASCIIテーブルを見るだけで、(拡張)ASCIIコードなので、0〜255の数値を表すだけでよく、8ビット= 1バイトになります。

ASCIIテーブルを見てください。例:ここ: http://www.asciitable.com/

Java=が設計されたとき、彼らは将来、任意の文字(Unicodeも)が16ビット= 2バイトで保持されることで十分であると予想しました。

5
Nidhoegger

これは、C言語が37歳であり、128個のASCII文字しか使用されなかったため、1文字にそれ以上のバイトを含める必要がなかったためです( http:// en.wikipedia.org/wiki/ASCII )。

5
Pavel Gatnar

Cが開発されたとき(1971年にその最初の本が開発者によって発行されました)、2つの主要な文字エンコード標準はASCIIとEBCDICで、それぞれ文字の7ビットと8ビットのエンコードでした) 。また、当時はメモリとディスク領域の両方が大きな懸念事項でしたが、Cは16ビットのアドレス空間を備えたマシンで普及しており、文字列に1バイト以上を使用することは無駄であると考えられていました。

Javaが登場した(1990年代中頃)までに、ある言語では文字のエンコーディングに国際標準を利用できると認識できるようになり、その定義にUnicodeが選択されました。それまでは、メモリとディスク容量はそれほど問題ではありませんでした。

2
arcy

C言語標準は、すべてのオブジェクトが整数の抽象を占有する仮想マシンを定義しますストレージユニットいくつかの固定ビットで構成されています(limits.hの_CHAR_BIT_マクロで指定)。各ストレージユニットは一意にアドレス可能でなければなりません。ストレージユニットは、基本文字セットの単一の文字が占めるストレージの量として定義されます。1。したがって、定義によりcharタイプのサイズは1です。

最終的に、これらの抽象ストレージユニットは物理ハードウェアにマッピングする必要があります。ほとんどの一般的なアーキテクチャは、個別にアドレス指定可能な8ビットバイトを使用するため、charオブジェクトは通常、単一の8ビットバイトにマップされます。

通常。

これまで、ネイティブのバイトサイズは6〜9ビット幅でした。 Cでは、charタイプは少なくとも 8ビット幅である必要があります。これは、基本文字セットのすべての文字を表すため、6ビットバイトのマシンをサポートするには、コンパイラはcharオブジェクトを2つのネイティブマシンバイトにマップする必要がある場合があります。_CHAR_BIT_は12です。sizeof (char)はまだ1なので、サイズNの型は_2 * N_ネイティブバイトにマップします。


1.基本的な文字セットは、大文字と小文字の両方の10桁の英数字26文字すべて、句読点とその他のグラフィック文字、および改行、タブ、フォームフィードなどの制御文字で構成され、すべてが8文字に収まります。ビット。
2
John Bode

ASCIIテーブル全体(128文字)を表すのに1バイトを超える必要はありません。

ただし、intタイプ(4バイト)またはlong doubleタイプ(12バイト)など、データを格納する余地のある他のCタイプがあります。

これらのすべてに数値が含まれています(文字も含まれます。 "文字"として表されていても、 "数字"です。比較して追加できます...)。

これらは、長さがcmとmのように、異なる標準サイズです。

0
vmonteco