我写了一个 Int128 类型,效果很好。我想我可以通过一个简单的想法来改进它的性能:改进有点笨拙的移位操作。
因为它们在乘法和除法中大量使用,所以改进会产生链式 react 。所以我开始创建一个动态方法(低位旋转高位),结果发现没有 OpCodes.Rol 或 OpCodes.Ror 指令。
这在 IL 中可能吗?
最佳答案
没有。
你需要用移位来实现它
UInt64 highBits = 0;
UInt64 lowBits = 1;
Int32 n = 63;
var altShift = (n - 63);
var lowShiftedOff = (n - 63) > 0 ? 0 : (lowBits << n);
var highShiftedOff = (n - 63) > 0 ? 0 : (highBits << n);
var highResult = (UInt64)(highShiftedOff | (altShift > 0 ? (lowBits << altShift - 1) : 0));
var lowResult= (UInt64)(lowShiftedOff | (altShift > 0 ? (highBits << altShift - 1) : 0));
关于c# - MSIL有ROL和ROR指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220579/