2011-01-10 11 views
1

char型に2バイト以上の値を格納することはできますか?C言語のchar型の値の範囲

char c;と言って、cに1000を保存します。それは可能ですか?

+3

なぜあなたはとにかく、 'char'を使用するようにしたいですか? 'short int'は2バイトを与え、小さなスペースに1000を簡単に格納するつもりはありません。 – geoffspear

答えて

12

技術的には、いいえ、charタイプには2バイト以上の値を格納できません。 Cでは、charとバイトは同じサイズですが、必ずしも8ビットに限定されません。多くの標準化団体は、正確に8ビットの値に「オクテット」という用語を使用する傾向があります。

あなたは(メモリから)limits.h内部で見れば、あなたはこれが、その後、はい、それ缶十分に大きければ、実際に、charのために使用され、どのように多くのビットを告げる(とりわけ)CHAR_BIT記号が表示されます値を格納します。

+1

しかし、事実上すべてのデスクトップでは、文字はちょうど8ビットの大きさであり、コード内で通常とは異なるバイトサイズの可能性を考慮するとおそらく過剰です。 – user168715

+3

@ user168715:私たちの中には、事実上すべてのデスクトップのセットよりも大きなユニバースで働く人もいます:-) – paxdiablo

+0

@ user168715:私はそれをサポートするためにどれだけの努力を払うのかという問題だと思います。 '8'ではなく' CHAR_BIT'と打ち込むだけであれば、私はそれを行います。異なるサイズのサポートバイトが実際にかなりの無駄な努力を払うならば、私は何とか(おそらくドキュメンテーションの中で)CHAR_BITが8でなければならないと主張し、私の人生に乗ります。 –

2

limits.hを含め、CHAR_MAXの値をチェックします。

1

おそらくありません。 C標準では、charには少なくとも8ビットを格納できる必要があるため、charに8ビット以上の値を移植することはできません。

(*今日最も一般的に使用されているシステムでは、文字は8ビットです)。

5

Cタイプに格納できる値の範囲はそのサイズによって異なり、Cで指定されていない値はアーキテクチャによって異なります。 charタイプの最小値は8ビットです。また、一般的に(ほぼ普遍的に)その最大値もあります(limits.hで確認できます)。 したがって、charでは、-128から127、または0から255(符号付きまたは符号なし)から格納できます。

4

Cのcharの最小サイズは8ビットです。これは256を超える値を保持するのに十分ではありません。 は、ワード・アドレッサブル・アーキテクチャなどの特定のインプリメンテーションで幅が広いことがありますが、それに頼るべきではありません。

+0

+1は、アドレス指定可能なアーキテクチャのようなものであることを思い出してください:-) –

0

文字の幅はシステムによって異なります。しかし、C99と合理的なものを使用していると仮定すると、intN_tとuintN_tという形式の型を定義するstdint.hヘッダーにアクセスする必要があります(N = 8,16,32,64)。これらは少なくともNビット幅であることが保証されています。だから、もしあなたが特定のビット数(システムにかかわらず)を持ったタイプを持つことを確かなものにしたいなら、それらはあなたが望む人です。

例:

#include <stdint.h> 

uint32_t foo; /* Unsigned, 32 bits */ 
int16_t bar; /* Signed, 16 bits */ 
+0

これらの型は、実装がそれらの仕様を満たす型を持っている場合にのみ必要です(これは、かなり可能性が高い)。たとえば、8ビットタイプがない場合、 'uint8_t'は存在しません。それらが存在する場合、「少なくとも」ではなく、Nビット幅で正確に保証されます。 "少なくとも"型は 'int_leastN_t'です。それを修正すれば、私はあなたに隆起を与えます:-) – paxdiablo