補数について

 投稿者:H.T  投稿日:2010年 5月14日(金)09時48分52秒
  補数という言葉には10を基準とした場合3の補数は7,2の補数は8,100を基準とした場合25の
補数は75という使い方と、5の補数は-5,7の補数は-7という使い方と二通りの使い方があるのでしょうか。
 

Re: 補数について

 投稿者:SECOND  投稿日:2010年 5月17日(月)03時48分45秒
  > No.1231[元記事へ]

! ご参考になれれば・・

!● MOD() の補数 動作

! 10を「法」とした 数空間(0~9)にした場合、

!  -7のように(0~9)範囲外の剰余が、残る場合、
!  MOD() は、「法」 の補数に変換して出力する。

PRINT "MOD(3,10)=";MOD(3,10), "MOD(-7,10)=";MOD(-7,10) !→(+3)になる
PRINT
PRINT "MOD() による8bit 数での、Signed → Unsigned"
FOR Signed= -3 TO 2
   LET Unsigned= MOD(Signed, 256)
   PRINT Signed; "→Unsigned="; Unsigned, right$("0000000"& BSTR$(Unsigned,2),8)
NEXT Signed

!※左側の Signed が負の範囲の Unsigned については、慣習上「2の補数」
! と呼ばれている。が、実態は、上の 8bit の例で言えば、2^8 を、
! 32bit なら 2^32 を、「法」とする補数になっている。

! 8bit の例で、-1 の補数形である 255 は、-1 そのものが形を変えただけとも、言えて、
! 元の -1 に加えても、合計は、254 で、「法」の 256 には、ならない。
! 区間距離の合計が、「法」 の 256 に、なるようです。

! なぜ、255 が -1 の代りになるか、8bit( 256) の「法」のもとで加算してみる。
PRINT
PRINT "MOD(10+255, 256)=";MOD(10+255, 256); !→9になる。

! 「法」の数空間は、不自然なようで、実は、有りきたりの日常です。
! マイコン内部のようなディジタル計算回路には、adder と呼ばれる加算器があって、
! 減算器というのは、ありません。減算命令を受けた時、彼は、負数を補数に変えて、
! 加算器に送っています。
! 補数に変える方法は簡単で、bit を全て反転し、+1する。

! レジスターは、有限桁なので、「法」の剰余だけが、残る数値。

END
 

補数について

 投稿者:H.T  投稿日:2010年 5月17日(月)11時25分23秒
  丁寧な回答ありがとうございました。  

戻る