|
> 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
|
|