我看specification爲DCPU-16,我無法理解與DIV指令溢出值的目的:DCPU-16除法指令
DIV A,B - 設置a到a/b,將O設置爲((a < < 16)/ b)& 0xffff。
有人可以在這裏解釋O的語義,它對於什麼有用?
我看specification爲DCPU-16,我無法理解與DIV指令溢出值的目的:DCPU-16除法指令
DIV A,B - 設置a到a/b,將O設置爲((a < < 16)/ b)& 0xffff。
有人可以在這裏解釋O的語義,它對於什麼有用?
它看起來像O給出了結果的小數部分(作爲定點數)。例如,考慮5/2:
a = 5/2 = 2 (integer part)
O = ((5 << 16)/2) & 0xffff = (327680/2) & 0xffff = 32768
如果考慮O爲16二進制小數位,則這表示結果的0.5小數部分。
看它的另一種方式是二進制結果以比特爲:
aaaaaaaaaaaaaaaa.OOOOOOOOOOOOOOOO
5/2是
0000000000000010.1000000000000000
正如你可以通過檢查出來,該結果爲5(101二進制)右移一位進入小數位。
((a<<16)/b)
將爲您提供該部門的16位小數部分。
以10爲基數很容易看出:如果我們想找到5/3的前三個小數位數,我們可以移動5個位置(5000)上的5個位置,除以3,然後取最後三位數字。 5000/3是1666,所以5/3小數點後的前三位數是.666。
此操作,因爲「移動5個位數以上」相同「乘以10」,和乘法/除法是可交換的(順序可以圍繞被交換),所以(5 * 1000)/3
= (5/3) * 1000
= 1.6666... * 1000
= 1666.666...
。
換句話說,將5移到幾個數字後除以3與移位(5/3)幾個數字相同。
我認爲它比無用的更糟,'O'需要32/16位的分隔!將「O」設置爲餘數會更有用,並且使得多精度算術更容易。 – 2012-04-11 20:18:12