我有以下代码实现线性反馈移位寄存器的移位动作:
public int DoShift()
{
//Find new top bit
int feedback = Contents & tapSequence;
int newBit = 0;
for(int i = 1; i <= length; i++)
{
newBit = 1 & (newBit ^ feedback);
feedback >>= 1;
}
//Remember falloff, shift register, add new bit
int result = Contents & 1;
Contents >>= 1;
Contents += newBit << (length - 1);
return result;
}
在哪里
- Contents 是寄存器的当前内容
- tapSequence 是 XOR 抽头序列,其中 1 代表已抽头位,0 代表未抽头位。
- 长度是寄存器的位数。
但是,在运行 CPU 使用率测试后,这个函数占用了我运行时间的 60%(我认为这是一个相当轻量级的方法)。有没有更有效的方法来写这个?有没有办法用自己的位对 int 的内容进行异或(以便取消 for 循环)?