4

DCPU-16の仕様を見ていますが、DIV命令でオーバーフロー値の目的を理解するのに問題があります。

DIV a、b-aをa / bに設定し、Oを((a << 16)/ b)&0xffffに設定します。

ここでOの意味的な意味を誰かが説明できますか?それは何に役立つでしょうか?

4

2 に答える 2

6

Oは結果の小数部分を(固定小数点数として)与えるように見えます。たとえば、5/2について考えてみます。

a = 5 / 2 = 2 (integer part)
O = ((5 << 16) / 2) & 0xffff = (327680 / 2) & 0xffff = 32768

Oを16の2進数の小数桁と見なす場合、これは結果の0.5の小数部分を表します。

それを見る別の方法は、ビット単位のバイナリ結果です。

aaaaaaaaaaaaaaaa.OOOOOOOOOOOOOOOO

5/2は

0000000000000010.1000000000000000

検査でわかるように、その結​​果は5(101バイナリ)が1ビット右に小数ビットにシフトされます。

于 2012-04-11T19:48:19.640 に答える
2

((a<<16)/b)除算の16ビットの小数部分が得られます。

基数10で見やすくなります。たとえば、5/3の最初の3桁の小数を検索する場合は、5を(5000)上に3桁移動し、それを3で割って、最後の3つを合計します。数字。5000/3は1666であるため、5/3の小数点以下の最初の3桁は.666です。


これが機能するのは、「5を1桁上に移動する」は、「10を掛ける」と同じであり、掛け算/割り算は可換であるため(順序を入れ替えることができる)、(5 * 1000) / 3===です。(5 / 3) * 10001.6666... * 10001666.666...

つまり、5を数桁シフトして3で除算することは、(5/3)を数桁シフトすることと同じです。

于 2012-04-11T19:49:46.517 に答える