有没有更好的方法来进行4位循环移位?

时间:2010-01-06 19:52:13

标签: .net bit-manipulation

这是进行4位循环移位的最佳方法吗?

<击>

<击>
    n << 1 ^ 0x10 | n >> 3

<击>

我只测试了实际上是“正在工作”的数字!

3 个答案:

答案 0 :(得分:2)

你真的试过这个吗?它不是最优的,它会产生垃圾结果。这应该更好:

    static int RollLeft4Bits(int n) {
        return ((n << 1) & 15) | ((n >> 3) & 1);
    }

答案 1 :(得分:1)

对我来说很好看。但如果您真的关心优化,那么请尝试编译这个以及您拥有的任何替代方案,然后使用ildasm或Reflector来查看生成的IL以确定。

答案 2 :(得分:1)

您还可以生成每个可能值和移位结果的查找表。然后只需使用输入作为查找表的索引即可获得所需的结果