【发布时间】:2018-10-11 16:23:59
【问题描述】:
我有一些包含 64 行代码块的 Java:
x = ((some_long_bitwise_expression) << n |
(same_long_bitwise_expression) >>> (32 - n))
其中“长表达式”在每一行中都是相同的,但从一行到下一行会发生变化。通常这只会使用方法调用来计算表达式,然后单独执行位旋转。但我想知道这是否可以优化,从而消除 64 个方法调用。
那么有什么方法可以计算和保存表达式乘积,然后在 OR 的另一边引用它?
如果我这样做:
int t;
x = ((t = (some_long_bitwise_expression)) << n |
(t) >>> (32 - n))
这实际上似乎有效。但它是合法的 Java 吗?
更新:
经过一些简单的性能测试后,我发现对 64 行代码中的每一行使用 3 种不同方法调用中的 1 种实际上要快得多。
【问题讨论】:
-
完全合法。
-
这种方式比在单独的行上设置
t更好吗? -
或者只写一个单独的
rotate函数 -
@phuclv 不,请改用
Integer.rotate*,因为它是内在函数,并且使用汇编程序旋转指令进行优化(与您自己的方法不同)。
标签: java optimization conditional bit-manipulation