0

1) 2 進数を 10 進数に変換するとき、左端のビットが 0、1 などを表すことを理解しています。たとえば、0001 を 10 進数に変換するには、0*2^0+0*2^1+0*2^2+1*2^3 なので、10 進数の値は 8 になります。

2) たとえば、バイナリ 1000 0000 に変換される 16 進数 0x80 に署名した場合、このバイナリ表現の 10 進数値を計算するには、署名されているため、7 ビットを反転する必要があるため、1111111 を取得して 1 を加算すると、 -128 である 10000000。

私の質問は、2 番目のケースで符号付きバイトの 10 進数を計算しているときに、右端のビットを 0 として開始しなければならなかったため、....+1*2^8 になった理由です。2 番目のケースの 1) で計算したように、2^0 が一番左のビットではないのはなぜですか?

ありがとう。

4

2 に答える 2

4

いいえ、通常、バイナリは別の方法で表されます...0001 は 1、1000 は 8 です。

于 2010-11-08T04:42:29.547 に答える
2

ポイント1に答えますが、完全ではありません。0001実際11000はあり8ます。あなたは間違った方向から来ているようです。1101たとえば、2 進数は次のようになります。

+------ 1 * 2^3     =  8
|+----- 1 * 2^2     =  4
||+---- 0 * 2^1     =  0
|||+--- 1 * 2^0     =  1
||||                  --
1101                = 13

ポイント 2 については、ビット パターンを符号付きの数値に変換する最も簡単な方法は、最初に符号なしの値 ( 0x80 = 128) に変換し、次にバイアス (8 ビットの場合は 256、16 ビットの場合は 65536 など) を減算して -128 を取得することです。 .

バイアスは、プロセスの最後の計算にのみ影響するはずです。これは、範囲0..255-128..127、または0..65535にマッピングする方法-32768..32767です。

于 2010-11-08T04:44:37.087 に答える