1 char = 1バイト= 8ビット(32ビットシステム)です。その後、char size confusion
char c=0xffff0000; //wrong
char
はちょうど8ビットと、ファイル内のすべての文字も8ビット長の許可理由。
ありがとうございました。 = 8ビット
1 char = 1バイト= 8ビット(32ビットシステム)です。その後、char size confusion
char c=0xffff0000; //wrong
char
はちょうど8ビットと、ファイル内のすべての文字も8ビット長の許可理由。
ありがとうございました。 = 8ビット
いいえはsizeofチャーは、定義1であるが、これは常に32ビット/ 8ビットを占めることを意味するものではありません。
$ 3.9.1/1 - 「の文字(文字)として宣言されたオブジェクトは 実装の基本的な文字セットの任意のメンバーを格納するのに十分な大き しなければなりません。」
バイトが8ビットであるという混乱があるようです。しかし、C++標準はこれを強制するものではありません。
はここで$はC + +メモリーモデルにおける基本的なストレージユニットがバイトで1.7/1バイトが標準で定義されているか
です。バイトは、少なくとも十分な大き 基本実行文字セットの任意のメンバーを含有することであり、 を実装定義さ 数のビットの 連続配列、から構成されています。
明らかなように、バイトは必ずしも8ビットである必要はありません。
バイトが8ビットでないシステムを知っていますか?好奇心。 –
@スティーブタウンゼント:いいえ。私のプログラミングの世界は90年代後半から始まります:) – Chubsdad
私は、一部のDSPには1バイトの12ビットが入っていると聞いています。 – botismarius
1バイト
今はほとんど普遍的ですが、必ずしもそうではありません。 C++標準は、(@Chubsdadによってポストされた見積もりによるような)6ビットバイトのコンピュータに対応しています。 –
@larsmans:実際はそうではありません。 CHAR_BITは少なくとも8でなければなりません。 –
@Fred Nurk:あなたは正しいですし、C++で必要な文字セットのサイズを誤って計算しました。 6,5ビットは、それらを格納する最小の 'char'サイズです。 –
システムが「32ビット」として分類されているという理由だけでは、32ビットのバイトを使用するわけではありません。
アーキテクチャ上(x86やx86-64など)でも可能な限り、バイトは(システムに依存した方法で)最小のアドレス指定可能なメモリとして定義され、多くのアーキテクチャではまだ8ビットです大量のデータをレジスタで処理しています(それぞれ32対64)。このような考え方をしている場合は、「バイト」の意味がアーキテクチャの変更に伴って変化するため、「オクテット」という言葉を8ビット単位で使用することがよくあります。
対照的に、「バイト」は常に8ビットであると定義されている人もいますが、質問の混乱は恐らく決して起こりません。などです。 32ビットシステムは32ビットとなる。
もちろん、システムを「n -bit」と分類するという全体の考え方は、非常に単純すぎます。
Cでは、常に#include <limits.h>
にしてからCHAR_BIT
マクロを使用して、コンパイラターゲットのchar
データ型のビット数を取得できます。
char
のビット数は、通常8(1バイト/オクテット)です。正確な番号は<climits>
のようにCHAR_BIT
と定義されています。
すでに作成された点に加えて、sizeof(char)
と文字のサイズが必ずしも同じではないことに注意してください。
マルチバイト文字セットは文字あたり1バイト以上を取ることができます。たとえば、Unicode文字は常に1バイト以上(sizeof(wchar_t)
)を占有します。
このトピックに関するMicrosoftのドキュメントはhereです。混乱を招くように、文字セットによっては、文字ごとに固定されたバイト数を使用しないものもあります。
"Unicode文字は常に2バイト(sizeof(wchar_t))は、sizeof(wchar_t)が常に2であることを示唆します。実際には共通の値が4であり、〜100.000 Unicode文字があるため意味があります。 – MSalters
@MSalters - 私はそれを知らなかった、ありがとう。 –
少なくとも、通常のコンパイラと同じようになっていますが、標準の観点からはまだいくつかのコメントがあります。 "マルチバイト文字"はCとC++でよく定義されていますが、それらは 'wchar_t 'ではありません。代わりに、マルチバイト文字(MBC)は、複数の 'char' ==バイトのシーケンスです。 Shift-JISまたはUTF-8はそのような文字を使用します。 'wchar_t'はマルチバイト文字と無関係なので、' sizeof(wchar_t) 'は常に> 1であると推論することはできません。 – MSalters
チャーは常にバイトであり、常に大き有する1
バイトは常に、少なくとも8ビットを有するが、いくつかのシステムの詳細を有することができます。
32ビットシステムでは、CまたはC++でアドレスバスのサイズを参照します。これは、バイトサイズではなくポインタのサイズと考えることができます。
チャーは、私は常に8ビットとしてこれを見ている80X86マシンで[#include <climits>
から】CHAR_BIT
ビット
を有しています。
TMS320C54xおよびTMS320C55x DSPでは、これを16ビットと見なしています。これは痛みでした。なぜなら、メモリを節約するためには、文字列ごとに2つのASCII文字を格納しなければなりませんでした。
常に、sizeof(char) == 1
1バイト= 8ビット。 – cpx
しかし、この質問に良いタイトル。 –
@ Dave18:バイトは必ずしも8ビットではありません - 最近ではもっとも一般的な値になります –