2

Art of Assembly Languageという本を読んでいます。そこでこの段落に出会いました。

HO ビットがゼロの場合、数値は正であり、標準のバイナリ値として格納されます。HO ビットが 1 の場合、数値は負であり、2 の補数形式で格納されます。正の数を負の 2 の補数形式に変換するには、次のアルゴリズムを使用します。

  1. 数値のすべてのビットを反転します。つまり、論理NOT関数を適用します。

  2. 反転結果に 1 を加算します。

    たとえば、 に相当する 8 ビットを計算するには、次のようにし-5ます。

    0000 0101  Five (in binary)   
    1111 1010  Invert all the bits.   
    1111 1011  Add one to obtain result.
    

0000 0101ここで、10 進数で が 5 で、1111 1011 が -5 であるかどうかを知りたいのですが、どのように表すの251でしょうか? 同じではありません1111 1011か?コンピューターは -5 と ? をどのように区別し251ますか?

4

2 に答える 2

4

符号付きの数値を 8 ビットで表す場合、8 番目のビット (HO ビット) が符号ビットです。したがって、数値の値を格納するために使用できるのは 7 ビットのみです。8 ビットの符号付き数値の範囲は -128..127 です。8 ビット以上を使用しない限り、251 を表すことはできません。

于 2010-10-11T16:39:27.340 に答える
2

コンピュータはこの 2 つを区別しません。適切な指示を使用するかどうかは、ユーザー次第です。

たとえば、x86 では、符号なしの数値にはJA(jump if Above) とJB(jump if below) を使用し、符号付きの数値にはJG(jump if greater) とJL(jump if less than) を使用します。同様に、符号付き数値の乗算/除算にはIMULandを使用し、符号なし数値にはandを使用します。IDIVMULDIV

于 2010-10-11T17:22:02.577 に答える