15

私はThe C++ Programming Languageを読んでいますが、その中で Stroustrup は、実装に応じて、char の int 値が 0 から 255 または -127 から 127 の範囲になる可能性があると述べています。これは正しいです?-128 から 127 の範囲である必要があるようです。そうでない場合、なぜ 2 番目の実装の可能性で 256 ではなく 255 の値しか使用できないのでしょうか。

4

5 に答える 5

18

2 の補数の考え方にとらわれています- C++ 標準では、負の数に使用される表現が定義されていません。

お使いのコンピュータ (絶対に禁じられています) が1 の補数を使用して負の数を表す場合、8 ビット バイトの範囲は -127 から + 127 になります。利点として、ゼロには 2 つの異なる表現が考えられます...

ただし、現実の世界では、1 の補数のコンピューターに出会うことはほとんどありません

于 2008-11-04T20:52:49.180 に答える
4

unsigned char の範囲が 0 から 255 であると考えるのは誤りです。これは最小範囲にすぎません。char には少なくとも 8 ビットが必要であり、signed char、unsigned char、および char 自体は実際には 8 ビットを超えることができます。つまり、unsigned char が 255 を超える可能性があることを意味します。確かに、8 ビットを超える実装はありませんが、理論的には可能です。c89 標準 (c++03 ベース) で指定されており、ファイル limits.h (CHAR_BIT、UCHAR_MAX、CHAR_MAX) が文書化されています。

于 2008-11-05T00:38:23.937 に答える
2

標準では char 型について何も述べていないため、「char」は次のようになります。

  1. 一部のコンパイラでは "unsigned char" (0-255) (例: ARM プロセッサ用の TexasInstruments コンパイラ - OMAP シリーズ)

  2. ほとんどのコンパイラ (gcc、MSVC ...) での "signed char" (-128-127)

適切に定義された範囲を常に確保するには、「signed char」または「unsigned char」を使用する必要があります。

于 2008-11-05T19:57:21.820 に答える
1

C および C++ の文字型

実装に応じて、それらのいずれかになる可能性があるようです。

于 2008-11-04T21:06:01.633 に答える
0

Roddy と Esteban Brenes の有益な返信に感謝します。

これは私の現在の理解です:

3 つの可能性があります。値が符号なしで表される場合、char の範囲は 0 から 255 です。値が符号付きで 2 の補数で表される場合、char の範囲は -128 から 127 です。最後に、値が符号付きで 1 の補数で表される場合、char は -127 から 127 の範囲になります。この最後の可能性は、最初の 2 つの実装の 256 の可能な値とは対照的に、255 の可能な値しかないことを示唆していますが、これは 1 の補数表現の負のゼロを考慮していません。 .

于 2008-11-04T22:49:42.907 に答える