3

Cは整数のバイナリ表現を定義しますか?たとえば、1、2の補数...またはこの表現プロセッサ(コンピュータまたは他の何か)に依存しますか?

Cで書かれたコードの例:

short a = -5;

a2の補数1111 1111 1111 1011または符号付きビット表現がどちらであるかを知るためにどこを探す必要があります1000 0000 0000 0101か?

4

5 に答える 5

6

C は、符号付き整数に対して次の 3 つの表現をサポートしています。

  • 2 の補数 (最も一般的で、実際に他の人に会うことはほとんどありません)
  • 1の補数
  • 符号と大きさ

C では、表現にパディング (非値) ビットを含めることもできますが、これも実際には非常に珍しいことです。

C では、整数をビッグ エンディアン、リトルエンディアン、またはその他のバイト順でメモリに格納するかどうかを定義していません。

特定のプラットフォームで整数がどの程度正確に表現されているかを知りたい場合は、基になるメモリを分析する必要があります。また、 の場合-INT_MAX == INT_MIN + 1、2 の補数表現があり、それ以外の場合は、3 つのうちのどれであるかは不明です。

最近では、パディング ビットがなく、表現が 2 の補数であると想定しても安全だと思います。

于 2013-02-26T11:25:21.807 に答える
5

リトル/ビッグ エンディアンと同じように、プラットフォームに依存します。また、特定のタイプの数のサイズはプラットフォームに依存します。

于 2013-02-26T11:16:38.683 に答える
4

整数の表現は、プラットフォーム(プロセッサ)に依存するものです。エンディアンを参照してください。

于 2013-02-26T11:15:01.580 に答える
3

整数のバイナリ表現はプラットフォームに依存します。プラットフォームがリトル エンディアン、次に整数に従う場合、-ve 番号は 2 の補数として格納されます。

a= -5;
b = 5;
printf("%d %d", a, b);
printf("\n%u %u", a, b);

表示されます、

-5 5
4294967291 5
于 2013-02-26T11:27:41.113 に答える
2

signed short -5 は 0xFFFB です。符号+絶対値表現は意味がありません。加算と減算は、符号付き/符号なしの型を気にしません。0xFFFB と 0x0005 を追加すると、0x0000 になります。0x8005 + 0x0005 を試すと、0x800A が得られます。これは、仮説 -10 によるとナンセンスです。数値は 2 進補数ですが、短い数値の -x = 2^16 - x (mod 2^16) です。

于 2013-02-26T11:34:25.443 に答える