给定代码:
uint Function(uint value)
{
return value * 0x123456D;
}
输入值0x300将产生结果0x69D04700。这只是结果的低32位。
给定结果0x69D04700和因数0x123456D,是否可以快速检索所有数字(值* 0x123456D)和0xFFFFFFFF = 0x69D04700?
编辑:我显示的代码是伪代码-我不能扩大返回类型。
最佳答案
您需要的是模块化除法,可以使用Euclid算法的一种版本进行计算。在这种情况下,结果为768。
这非常快-即使是幼稚的实现,时间(log n)2。 (如果您需要处理大量数据,我可以引用更好的算法。)
有关如何实现此功能的草图,请参见extended Euclidean algorithm。
关于c# - 反转已溢出的乘法运算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6944910/