我正在查看DCPU-16的规格说明,并且很难理解DIV指令的溢出值的用途:
DIV a,b-将a设置为a/b,将O设置为((a<<16)/b)&0 0xffff。
有人能在这里解释O的语义含义吗?它有什么用?
发布于 2012-04-11 19:48:19
看起来O给出了结果的小数部分(作为一个不动点数)。例如,考虑5/ 2:
a = 5 / 2 = 2 (integer part)
O = ((5 << 16) / 2) & 0xffff = (327680 / 2) & 0xffff = 32768如果您认为O是16位二进制小数,那么这表示结果的0.5小数部分。
另一种看待它的方法是二进制比特的结果是:
aaaaaaaaaaaaaaaa.OOOOOOOOOOOOOOOO5/2是
0000000000000010.1000000000000000您可以通过检查来判断,结果是5 (101二进制)向右移动1位到小数位。
发布于 2012-04-11 19:49:46
((a<<16)/b)会给你除法的16位小数部分.
如果我们想要找到前三个小数位数,比如说,5/3,我们可以在(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)为几个数字。
https://stackoverflow.com/questions/10112671
复制相似问题