Cは整数のバイナリ表現を定義しますか?たとえば、1、2の補数...またはこの表現プロセッサ(コンピュータまたは他の何か)に依存しますか?
Cで書かれたコードの例:
short a = -5;
a
2の補数1111 1111 1111 1011
または符号付きビット表現がどちらであるかを知るためにどこを探す必要があります1000 0000 0000 0101
か?
C は、符号付き整数に対して次の 3 つの表現をサポートしています。
C では、表現にパディング (非値) ビットを含めることもできますが、これも実際には非常に珍しいことです。
C では、整数をビッグ エンディアン、リトルエンディアン、またはその他のバイト順でメモリに格納するかどうかを定義していません。
特定のプラットフォームで整数がどの程度正確に表現されているかを知りたい場合は、基になるメモリを分析する必要があります。また、 の場合-INT_MAX == INT_MIN + 1
、2 の補数表現があり、それ以外の場合は、3 つのうちのどれであるかは不明です。
最近では、パディング ビットがなく、表現が 2 の補数であると想定しても安全だと思います。
リトル/ビッグ エンディアンと同じように、プラットフォームに依存します。また、特定のタイプの数のサイズはプラットフォームに依存します。
整数の表現は、プラットフォーム(プロセッサ)に依存するものです。エンディアンを参照してください。
整数のバイナリ表現はプラットフォームに依存します。プラットフォームがリトル エンディアン、次に整数に従う場合、-ve 番号は 2 の補数として格納されます。
a= -5;
b = 5;
printf("%d %d", a, b);
printf("\n%u %u", a, b);
表示されます、
-5 5
4294967291 5
signed short -5 は 0xFFFB です。符号+絶対値表現は意味がありません。加算と減算は、符号付き/符号なしの型を気にしません。0xFFFB と 0x0005 を追加すると、0x0000 になります。0x8005 + 0x0005 を試すと、0x800A が得られます。これは、仮説 -10 によるとナンセンスです。数値は 2 進補数ですが、短い数値の -x = 2^16 - x (mod 2^16) です。