我有一系列位,由指针表示。
Bit* bits[32];
现在我需要实现二进制右旋转运算符。我知道第一部分是相同数量的右移,它处理所有没有环绕的位,但我不确定如何处理那些环绕的位。
如何确定最终结果中哪些位最终位于哪些位置?
到目前为止,我有
ExpressionHolder rotate(unsigned int other) const {
ExpressionHolder out;
out.e = new Expression;
for(int i = 0; i < (32 - other); i++) {
out.e->bits[i] = e->bits[i + other];
}
for(int i = (32 - other); i < 32; i++) {
out.e->bits[i] = e->bits[31 - i];
}
return out;
}
它是否正确?