正の数の2の補数表記は、その2進表現と同じですか?
7 に答える
一部の回答とコメントは、「2 の補数表記」と「数の 2 の補数」の関係を混乱させています。質問は少し明確にする必要があるかもしれませんが、明らかに「2 の補数表記」について質問しています。
2 の補数表記には、正の数と負の数の両方が含まれます。2 進数は多くのことを意味する可能性があるため、2 進数が何を表すと想定されているかを判断するには、まずどの表記法またはエンコードが使用されているかを知る必要があります。2 進数は、符号なし整数、2 の補数整数、IEEE 浮動小数点数、文字列、またはまったく別のものである可能性があります。
したがって、2 の補数表記の 7 は、符号なし整数と同様に 00000111 です。また、2 の補数表記の -7 は 11111001 です。
したがって、はい、2 の補数表記の正の整数は、符号なし整数と同じ方法で表されます (使用されているビット数に対して有効な整数であると仮定します)。
ここで何かを混乱させていると思います。正の整数は、通常、単純な 2 進数として格納されます。1 は 1、10 は 2、11 は 3 などです。負の整数は、対応する正の整数の絶対値の 2 の補数として格納されます。正の数の 2 の補数は、この表記を使用すると負の数になります。
数値の符号を反転するには、常にその数値の 2 の補数を計算します。すべてのビットを反転してから 1 を追加します。これは、元の数値が正か負かに関係なく行われます。
例: 8 ビットの符号付き 2 進数表記の 3 は 00000011 です。符号を反転するには、最初にすべてのビットを反転し (11111100)、次に 1 を追加します (11111101)。つまり、-3 は 11111101 です。もう一度符号を反転するには、最初にすべてのビット (00000010) を反転し、次に 1 (00000011) を追加すると、これは同じ 3 であることがわかります。
正数の2の補数表記は同じ数ですか?
良い例は、256 = 255 + 1、および (255 − x) が x の 1 の補数であることに注意することによって、2 の補数との関係が実現されるwikiからのものです。
0000 0111=7 2 の補数は 1111 1001= -7
それが機能する方法は、msb(最上位ビット)が負の値を受け取るため、上記の場合
-7 = 1001= -8 + 0+ 0+ 1
編集 - 2 の補数表記で書かれた正の数は、符号なし表記で書かれた数と同じです (ただし、最上位ビットはゼロでなければなりません)。負の数は、その絶対値のすべてのビットを反転し、結果に 1 を追加することにより、2 の補数表記で書き込むことができます。2 の補数表記
k ビットの 2 の補数表記で表現できる最大数は 2^(k-1)−1 です。
私がコンピュータサイエンスのクラスで学んだことから、2の補数、1の補数、および符号付きの大きさは、正の整数値でのみ同じです。これは負の整数値とは異なります。1の補数の場合はビットを反転する必要があり、2の補数の場合は反転したビットを保持し、負のビットを絶対整数にするために1ビットを追加します。
私はまだ学んでいます、コンピュータサイエンスの1年生、それが役に立てば幸いです。
いいえ、正数の 2 の補数は同じ数ではありません。それらは 2 の補数形式でメモリに格納されません。正の数の場合はそのままメモリに格納され、負の数の場合のみ 2 の補数形式で表現されます。2 の補数は減算に適しているため、負の数は 2 の補数形式で格納されます。例: 5 + -7 = -2 ここで、-7 は 2 の補数形式 (1001) で格納されます。0101 + 1001 = 1110 自動的に否定的な答えが得られることに注意してください
これは本当です。負の数の表現に1を追加しない場合、値は0と-0になりますが、これは少し無駄です。
これを使用して、数値が twos comp でどのように表現されるかを確認できます。