私が知っているように、1文字= 1バイト= 8ビット(32ビットシステム)です。
char c=0xffff0000; //wrong
それでは、なぜ8ビットchar
だけを許可し、ファイル内のすべての文字も8ビット長にするのでしょうか。
ありがとう。
いいえ。 char のサイズは定義により 1 です。ただし、これは常に 32 ビット/8 ビットを占有するという意味ではありません。
$3.9.1/1-「文字 (char) として宣言されたオブジェクトは、実装の基本文字セットのメンバーを格納するのに十分な大きさでなければなりません。」
1 バイトが 8 ビットであるという混乱があるようです。ただし、C++ 標準ではこれを義務付けていません。
標準 $1.7/1 でのバイトの定義方法は次のとおりです。
C++ メモリ モデルの基本的な記憶単位はバイトです。バイトは、少なくとも基本的な実行文字セットの任意のメンバーを格納するのに十分な大きさであり、ビットの連続したシーケンスで構成されており、その数は実装定義です。
明らかなように、1 バイトは常に 8 ビットである必要はありません。
システムが「32ビット」に分類されているからといって、32ビットバイトを使用しているわけではありません。
多くの場合、バイトは(システムに依存する方法で)アドレス可能な最小のメモリとして定義されます。多くのアーキテクチャでは、アーキテクチャ(x86やx86-64など)が大量に処理できる場合でも、8ビットのままです。レジスタ内のデータの数(それぞれ32対64)。この考え方に興味がある場合は、「バイト」の意味が議論されているアーキテクチャによって変わるため、「オクテット」という言葉を使用して8ビット量について話すことがよくあります。
char
対照的に、一部の人々にとって、「バイト」は常に8ビットであると定義されますが、たとえば32ビットシステムでは32ビットであるとは予想されないため、質問の混乱はおそらく発生しません。
もちろん、システムを「nビット」として分類するという考え全体は、物事を非常に単純化しすぎています。
Cでは、いつでもマクロを#include <limits.h>
使用CHAR_BIT
して、コンパイラターゲットのchar
データ型のビット数を取得できます。
charは常にバイトであり、サイズは常に1です。
バイトには常に少なくとも8ビットが含まれますが、システムによってはそれ以上になる場合があります。
32ビットシステムはアドレスバスのサイズを指します。CまたはC++では、これはバイトのサイズではなく、ポインタのサイズと考えることができます。
char にはCHAR_BIT
ビットがあります [from #include <climits>
]
80x86 マシンでは、これは常に 8 ビットと見なされていました。
TMS320C54x および TMS320C55x DSP では、16 ビットとして表示されます。メモリを節約するために、各文字に保持される 2 つの ASCII 文字で文字列をパックする必要があったため、これは苦痛でした!
いつも、sizeof(char) == 1
char
通常8(1バイト/オクテット)のビット数。正確な数は、ヘッダー<climits>
でとして定義されていCHAR_BIT
ます。
すでに作成されたポイントに加えてsizeof(char)
、文字のサイズとサイズが常に同じであるとは限らないことに注意してください。
マルチバイト文字セットは、文字ごとに1バイトを超える場合があります。たとえば、Unicode文字は常に複数のバイト(sizeof(wchar_t)
)を使用します。
このトピックに関するMicrosoftのドキュメントはこちらです。混乱を増すために、一部の文字セットは、各文字に固定バイト数を使用していません。
1 バイト = 8 ビット
1 バイトは 32 ビットではありません。どのシステムを使用していても、1 バイトは常に 8 ビットです。
「32 ビット」のシステムとは、「ワード」サイズが 32 ビットであることを意味します。つまり、データはシステム全体で 32 ビットのチャンクで転送されます。