ポインターで表される一連のビットがあります。
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;
}
これは正しいです?