3

アセンブリに算術プログラムがありますが、負の数を加算、減算、乗算すると、目的の出力が得られません。

例えば

入力:

-1+2=66675 (should be 1)

-1-1=656745 (should be -2)

-1*-1=66757 (should be 1) 

質問:

  • (-)と(1)を1つとしてどのように扱いますか?

  • 符号付き数値で算術演算を行う方法は?

アドバイスをお願いします...

4

1 に答える 1

1

2 の賛辞と、signed int と unsigned int の違いについて読むことをお勧めします。あなたが表示している値は、変換を行わずに unsigned int 値に変換されている signed int の負の値のように疑わしく見えます。負の整数には、1 に設定された最上位ビットがあります。最初にマスキングせずにその値を unsigned int に押し込むと、予想よりもはるかに大きな数値が得られます。

8 ビット表現の例:

signed value = -1 
unsigned value = 255 
binary = 1111 1111

Take the twos compliment: 
       1111 1111
XOR    0000 0000
equals 0000 0000
add1   0000 0001
dec value = 1

ここで詳細を学ぶことができます (2 の補数加算の例を参照できます): http://academic.evergreen.edu/projects/biophysics/technotes/program/2s_comp.htm

于 2013-02-11T17:28:42.013 に答える