代码之家  ›  专栏  ›  技术社区  ›  Fredou

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

  •  0
  • Fredou  · 技术社区  · 14 年前

    这是 最优的 4位循环移位的方法?

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

    我只是用数字来测试 工作 “!

    3 回复  |  直到 14 年前
        1
  •  2
  •   Hans Passant    14 年前

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

        static int RollLeft4Bits(int n) {
            return ((n << 1) & 15) | ((n >> 3) & 1);
        }
    
        2
  •  1
  •   David M    14 年前

    我觉得不错。但是,如果你真的那么关注优化,那么试着编译它和你拥有的任何替代方法,然后使用ildasm或 Reflector 查看生成的IL以确定。

        3
  •  1
  •   StarPacker    14 年前

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